首页 > 解决方案 > C#检查字符串是否存在,如果存在则显示该字符串

问题描述

如何从与我的字符串匹配的循环中获取单个值。

我有一个符号列表,有时包含超过 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#

标签: c#stringforeach

解决方案


你的问题不是很清楚。根据您发布的内容,您当前始终收到最后一个值,这是未预料到的。如果您只期望循环中的第一个匹配值,那么您必须在使用break;语句找到匹配时中断循环。所以在下面几行之后把 4break;放在你的循环中。

defaultSymbol = symbol.ToString(); break; //2places
defaultSymbol = "EURUSD"; break;
defaultSymbol = "AUSCAD"; break;

但在这种情况下,您只会获得第一个匹配值,这取决于您的内部序列m4.Symbols

您的代码可能有更多额外的逻辑。如果您可以告诉我们 m4.Symbols 的类型并在 m4.Symbols 中发布一些示例值并告诉我们示例预期输出,那么我可以为您提供更详细的帮助


推荐阅读