0

我有这个 LINQ 语句,它试图设置字符串 [] 集合中的第一个元素。但它不起作用。

下面是 LINQ 语句。

 docSpcItem.Where(x => x.DocID == 2146943)
           .FirstOrDefault()
           .FinishingOptionsDesc[0] = "new value";

public string[] FinishingOptionsDesc
{ 
        get
        {
            if (this._FinishingOptionsDesc != null)
            {
                return (string[])this._FinishingOptionsDesc.ToArray(typeof(string));
            }
            return null;
        }
        set { this._FinishingOptionsDesc = new ArrayList(value); }
}

我上面的 LINQ 语句有什么问题?

4

1 回答 1

2

几件事..您的 get 和 set 存在一些问题。我只会使用这样的自动属性..

public class DocSpcItem
{
    public string[] FinishingOptionsDesc { get; set; }
    public int DocID { get; set; }
}

接下来对于您的 linq 语句,根据 id 为 2146943 的项目的存在,您可能正在设置对象的新版本,而不是您想要的。这应该工作..

[TestMethod]
public void Linq()
{
    var items = new List<DocSpcItem>();
    //2146943 
    for (var i = 2146930; i <= 2146950; i++)
    {
        items.Add(new DocSpcItem() 
                     {   DocID = i
                         , FinishingOptionsDesc = new string[] 
                              { i.ToString() } 
                     }
                 );
    }

    var item = items.FirstOrDefault(i => i.DocID == 2146943);
    if (item != null)
    {
        item.FinishingOptionsDesc = new string[]{"The New Value"};
    }
}

public class DocSpcItem
{
    public string[] FinishingOptionsDesc { get; set; }
    public int DocID { get; set; }
}

在此处输入图像描述

于 2013-04-10T06:11:06.663 回答