4 回答

TA貢獻1780條經(jīng)驗 獲得超4個贊
首先,您應該將變量的值移動到如下所示的字典結(jié)構(gòu)中
var tbl = new Dictionary<string, string>() {
{ "70V", "1,2,3,4" },
{ "100V", "10,20,30,40" },
{ "25V", ".2,.4,.6,.8" },
};
然后您可以使用以下代碼輕松查詢它
tbl.SelectMany(x => x.Value.Split(',').Select(y => $"{y} Watt {x.Key}"));
該SelectMany調(diào)用展平了多層層次結(jié)構(gòu),并返回IEnumerable<string>帶有所需字符串的 。對于內(nèi)插字符串的$"{y}"語法,如果您不使用受支持的 C# 版本,則可以使用string.Format而不是字符串內(nèi)插
更新
根據(jù) OP 的評論,我提供了一種形成上面字典的方法
var tbl = new Dictionary<string, string>() {
{ nameof(Tap70V), Tap70V },
{ nameof(Tap100V), Tap100V },
{ nameof(Tap25V), Tap25V },
};
依賴變量名來獲取值是一種危險的做法。如果 OP 提供了 和 的值如何可用70V,那么我可以用合適的方式更新答案以使其適應該解決方案100V25V

TA貢獻1779條經(jīng)驗 獲得超6個贊
問題是:你怎么知道值的范圍與 70V 有關(guān),而值的范圍與 25V 有關(guān)?
但讓我們假設(shè)您有一系列電壓文本組合:
Voltage | Text
70 | "1,2,3,4"
100 | "10,20,30,40"
25 | ".2,.4,.6,.8"
例如,從您的三個變量創(chuàng)建它們:
IEnumerable<VoltageTextCombination> voltageTextCombinations = new VoltageTextCombination[]
{
new VoltageTextCombination {Voltage = 70, Text = Tap70V},
new VoltageTextCombination {Voltage = 100, Text = Tap100V},
new VoltageTextCombination {Voltage = 25, Text = Tap25V},
}
我為此定義了一個類 VoltageTextCombination。當然,您也可以為此使用匿名類型。
要獲得您的組合框項目序列,您需要將文本拆分為一系列瓦特,并使用正確的SelectMany 重載來獲得一系列電壓 - 瓦特組合。之后,您使用 String.Format 將每個電壓 - 瓦特組合轉(zhuǎn)換為您想要顯示的文本:
下面的 LINQ 中使用的常量,用于將輸入文本拆分為瓦特,并將電壓 - 瓦特組合格式化為字符串:
static readonly char[] separatorChars = new char[] {','};
const string strFormat ="{0} Watt {1}V";
LINQ 查詢:
var result = voltageTextCombinations.SelectMany(
// parameter collectionSelector:
// input a source element (= one voltageTextCombination)
// output a sequence (= the text of the combination split into Watts
combination => combination.Text.Split(separatorChars),
// parameter resultSelector: take one source element, and one of every watt
// to make a Voltage - Watt combination
(voltageTextCombi, splitString) => new
{
Voltage = voltageTextCombi.Voltage,
Watt = splitString,
})
// convert every Voltage-Watt combination to one string:
.Select(voltageWattCombi => String.Format(strFormat,
voltageWattCombi.Watt,
voltageWattCombi.Voltage));
非常簡單!

TA貢獻1798條經(jīng)驗 獲得超7個贊
這是我能想到的最干凈的方法來完成我的問題:
if (value is IItemLibrarySpeaker s)
{
List<string> taps = s.Speaker25VTaps.Split(',').Select(x => $"{x} Watt/25V").ToList();
taps.AddRange(s.Speaker70VTaps.Split(',').Select(x => $"{x} Watt/70V"));
taps.AddRange(s.Speaker100VTaps.Split(',').Select(x => $"{x} Watt/100V"));
return taps;
}
感謝您的建議(即使是與我的問題無關(guān)的建議)

TA貢獻1846條經(jīng)驗 獲得超7個贊
根據(jù)提供的示例數(shù)據(jù),我制作了如下示例代碼:
string Tap70V = "1,2,3,4"; //example data
string Tap100V = "10,20,30,40"; //example data
string Tap25V = ".2,.4,.6,.8"; //example data
var test = new List<string>();
test.AddRange(Tap70V.Split(',').Select(val => val + " Watt 70V"));
test.AddRange(Tap100V.Split(',').Select(val => val + " Watt 100V"));
test.AddRange(Tap25V.Split(',').Select(val => val + " Watt 25V"));
在上面的代碼中,將字符串對象值添加到List<string>變量 namedtest中。對于每個對象數(shù)據(jù)都需要拆分并添加范圍到列表中。
- 4 回答
- 0 關(guān)注
- 137 瀏覽
添加回答
舉報