如何从匹配我的字符串的循环中获取单个值。
我有一个符号列表,有时包含超过6个字符。
使用当前代码,我将从列表中获取最后一个符号。
所以我想做的是:
下面是代码和图片,因此您可以看到所有符号列表。
string defaultSymbol = "";
// get all symbols from market watch
foreach (string symbol in mt4.Symbols)
{
Console.WriteLine(symbol);
// if symbol length is greater that 6, there is a special symbol ex. EURUSD-X, EURUSD#, EURUSD-AX
if (symbol.Length > 6)
{
// there is special symbol, ex. EURUSD#
if (symbol.Contains("EURUSD"))
{
defaultSymbol = symbol.ToString(); // special symbol ex. EURUSD-X or EURUSD# or EURUSD-AX ...
}
else if (symbol.Contains("AUSCAD"))
{
// load another symbol ex. AUSCAD-X, AUSCAD#
defaultSymbol = symbol.ToString(); // this need to load any other one that have more that 6 chars
}
}
else
{
// thsere is no special symbol, load EURUSD by default
// EURUSD exists
if (symbol.Contains("EURUSD"))
{
defaultSymbol = "EURUSD";
}
else
{
// load another symbol ex. AUSCAD if EURUSD don't exists
defaultSymbol = "AUSCAD";
}
}
}
Console.WriteLine("Symbol " + defaultSymbol);
测试字符串:
AUDNZD#
AUDUSD#
CADJPY#
CHFJPY#
EURAUD#
EURCAD#
EURCHF#
EURGBP#
EURJPY#
EURNZD#
EURUSD#
GBPAUD#
GBPCAD#
GBPJPY#
GBPNZD#
GBPUSD#
NZDJPY#
NZDUSD#
USDCAD#
USDCHF#
USDCNH#
USDJPY#
USDSGD#
USDTHB#
XAGUSD#
XAUUSD#
答案 0 :(得分:0)
您的问题不太清楚。根据您发布的内容,您当前总是总是收到最后一个值,这是不期望的。如果您只期望循环中的第一个匹配值,那么一旦它使用break;
语句找到匹配项,就必须中断循环。因此,在以下几行之后将4 break;
放入循环中。
defaultSymbol = symbol.ToString(); break; //2places
defaultSymbol = "EURUSD"; break;
defaultSymbol = "AUSCAD"; break;
但是在这种情况下,您只会获得第一个匹配值,并且取决于m4.Symbols
您的代码可能还有更多的逻辑。如果您可以告诉我们什么是m4.Symbols类型,然后在m4.Symbols中发布一些示例值并告诉我们示例预期输出,那么我可以为您提供更多详细信息