0

string[] のコレクションの最初の要素を設定しようとするこの 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 に答える