C # if синтаксис оператора со списком объектов - PullRequest
5 голосов
/ 21 июля 2010

У меня есть список объектов, называемых Атрибутами, которые, по сути, мне нужно сделать следующее в C #

<pseudocode>
if (list.Contains(Attribute where getName() == "owner"))
{
   do stuff
}
</pseudocode>

проблема, с которой я сталкиваюсь, заключается в том, что бит вложенных скобок для if - «Attribute where getName () ==« owner ». да, просто получается, что мне нужно сделать бит в слешах, и я не знаю как.

if (attributes.Contains(Attribute /where/ attribute.getName() == "Owner"))
    {
        string value = attr.getValue();
        value = value.Replace(domain, "");
        user = value;
        UserExists(value);
    }

Я, вероятно, был плотным, но мне пришлось перезапустить 3-дневную разработку, чтобы изменить все на использование объектов атрибутов, так что мой мозг довольно разрушен. К сожалению.

Ответы [ 8 ]

13 голосов
/ 21 июля 2010

Если вы используете версию .NET, которая поддерживает LINQ (3.5 или выше), попробуйте

if(attributes.Any(attribute=>attribute.getName()=="Owner"))
{
    do stuff
}

Это имеет то преимущество, что он достаточно читабелен для тех, кто должен поддерживать этот код.

3 голосов
/ 21 июля 2010
if(list.Exists(e=>e.getName() == "owner")) {
   //yup
}
2 голосов
/ 21 июля 2010

Без LINQ!:

if (list.Exists(delegate(Attribute a) { return a.GetName() == "Owner"; }))
1 голос
/ 21 июля 2010

Вы можете использовать LINQ для объектов

if (attributes.Count(a => a.getName() == "Owner") > 0)
0 голосов
/ 21 июля 2010

Вы можете использовать LINQ для выделения необходимых атрибутов ...

IEnumerable<TAttribute> ownerAttributes =
    attributes.Where(attribute => attribute.getName() == "Owner");

... и затем выполнять итерацию по этим атрибутам, применяя соответствующую логику ...

foreach(TAttribute attribute in ownerAttributes)
{
    // Do stuff...
}
0 голосов
/ 21 июля 2010

Хорошо, я разработал это, я нашел гораздо лучший способ сделать это:

for (int i = 0; i < attributes.Count; i++)
{
    if (attributes[i].getName() == "Owner")
    {
       string value = attributes[i].getValue();
       value = value.Replace(domain, "");
       user = value;
       UserExists(value);
    }
}

, который имеет больше смысла и фактически работает.

0 голосов
/ 21 июля 2010

Пожалуйста, посмотрите:

var filteredAttributes = from attribute in Attributes 
                         where string.Compare(attribute.getName() ,"Owner",true)==0
                         select attribute;

foreach(var attribute in filteredAttributes)
{
          string value = attr.getValue();
                value = value.Replace(domain, "");
                user = value;
                UserExists(value);

}
0 голосов
/ 21 июля 2010

используете ли вы .NET 3.5 или выше, если это так и предполагая, что «атрибуты» получены из IEnumerable, вы можете сделать следующее:

if (attributes.Any(attrib=>attrib.GetName() == "Owner"))
{
    //Do code here...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...