iT邦幫忙

0

如何取得列舉結果中的值

我透過以下方法可以找到一群id(目前只有兩筆),其結果如下所示 :

var reports1 = Subject.FindInstances("Application").Select(x => Subject.GetNodeIds(x));

https://ithelp.ithome.com.tw/upload/images/20191202/20115336FOJux9jZOy.png

我在網路上有先找解法,但我自己嘗試後都會報錯,請問我該怎麼取得結果檢視的結果呢?

以下是我自行嘗試的方法,會得到一樣的錯誤訊息 :

foreach(var item in reports1)
{
    var rId=Enum.GetValues(row);
}
public class ReportDatas{
    public string IdNumber{ get; set; }
}

https://ithelp.ithome.com.tw/upload/images/20191202/20115336zE2fWElALI.png

[12/3更新答案]

//將IdNumber更改定義為IEnumerable<string>
public class ReportDatas{
    public IEnumerable<string> IdNumber{ get; set; }
}

var reports = Subject.FindInstances("Application").Select(x => new ReportDatas{IdNumber = Subject.GetNodeIds(x)}).ToArray();
看更多先前的討論...收起先前的討論...
fysh711426 iT邦研究生 3 級 ‧ 2019-12-02 14:17:32 檢舉
Subject.FindInstances 這個是套件嗎?
anniecat iT邦新手 4 級 ‧ 2019-12-02 14:22:03 檢舉
不是,是前輩寫的一個static的IEnumerable的方法
fysh711426 iT邦研究生 3 級 ‧ 2019-12-02 14:31:12 檢舉
foreach(var item in reports1)
這個 item 是什麼型態呢?
fysh711426 iT邦研究生 3 級 ‧ 2019-12-02 14:52:40 檢舉
foreach(var nodes in reports1)
foreach(var item in nodes)
item <- 應該是你要的
anniecat iT邦新手 4 級 ‧ 2019-12-03 13:33:06 檢舉
fysh711426,嘗試過後無法直接取值,很謝謝你~
[12/3更新] 我把答案更新在發問中了~謝謝你的幫忙~
1
小魚
iT邦大師 1 級 ‧ 2019-12-02 13:59:49
最佳解答

IdNumber是string,
GetValues是一個陣列,
要怎麼相等呢?

anniecat iT邦新手 4 級 ‧ 2019-12-02 14:14:16 檢舉

我是嘗試這個方法試看看的,但看起來應該不是這樣使用,因為他是一個類型的應用,不知道我還可以朝什麼方向去看或怎麼去取得結果(結果檢視[0])呢?

小魚 iT邦大師 1 級 ‧ 2019-12-02 14:40:25 檢舉

因為你那不是原生的方法,
很難光憑程式碼看出來,
你還是問一下前輩吧.

anniecat iT邦新手 4 級 ‧ 2019-12-03 13:37:30 檢舉

小魚,後來我發現IdNumber應該定義為一個IEnumerable<string>,因為GetValues找出來的是這個型態,再使用迴圈把值找出來,只是找值時必須使用dynamic去定義變數,目前還不知道為什麼會這樣,但是與您提供的問題是相關的,並已把答案更新於問題中,謝謝!

0
sion
iT邦新手 4 級 ‧ 2019-12-02 15:23:58

LinQ查出來的都是一個IEnumerable的值

你要察看結果可以ToList或是ToArray來看
你的前輩會寫IEnumerable的方法,應該只是方便使用LinQ吧

var reports1 = Subject.FindInstances("Application").Select(x => Subject.GetNodeIds(x)).ToList();
anniecat iT邦新手 4 級 ‧ 2019-12-02 21:10:12 檢舉

sion,謝謝您,這個方法我有嘗試過了,會有一樣的問題呢...
[12/3更新] 我把答案更新在發問中了~謝謝你的幫忙~

0
浩瀚星空
iT邦大師 1 級 ‧ 2019-12-02 17:55:12

可以試試在要取的值加一個[0]在後面試試。
搞不好能拿到。我猜的。不對不要打我。

anniecat iT邦新手 4 級 ‧ 2019-12-03 13:32:34 檢舉

浩瀚星空,嘗試過後發現無法直接這樣取值,謝謝你的幫忙~
[12/3更新] 我把答案更新在發問中了~謝謝你的幫忙~

0
優悠
iT邦新手 4 級 ‧ 2019-12-03 09:04:08
var reports1 = Subject.FindInstances("Application").Select(x => Subject.GetNodeIds(x));
//這段改成
var reports1 = Subject.FindInstances("Application").Select(x =>  Subject.GetNodeIds(x).ToString());

var sData_L=reports1.Split(':');
var sID=sData_L[sData_L.Length-1].TrimEnd('}');

看看這樣行不行。

anniecat iT邦新手 4 級 ‧ 2019-12-03 13:34:37 檢舉

無法直接使用Subject.GetNodeIds(x).ToString()取值,後來有找到解法了,今天在更新於問題中,謝謝優悠~
[12/3更新] 我把答案更新在發問中了~謝謝你的幫忙~

我要發表回答

立即登入回答