2

以下の解決策を試しましたが、気に入りません。をカプセル化するのではなく、クラスを拡張することを探していますdouble[]

ありがとう。

編集: .NET 2.0 で作業する必要があります

public class DoubleArray : IList, ICloneable
{

    protected double[] items;

    /// <summary>
    /// Gets the last item in the array.
    /// </summary>
    public double Last { get { return items[items.Length-1]; } }

    /// <summary>
    /// Gets the number of items in the array.
    /// </summary>
    public int Length { get { return items.Length; } }

    /// <summary>
    /// Number of items constructor.
    /// </summary>
    /// <param name="len">Number of items</param>
    public DoubleArray(int len)
    {
        items = new double[len];
    }      

    public double this[int index]
    {
        get { return items[index]; }
        set { items[index] = value; }
    }

    public bool IsReadOnly
    {
        get { return items.IsReadOnly; }
    }

    public bool IsFixedSize
    {
        get { return items.IsFixedSize; }
    }

    public void CopyTo(Array array, int index)
    {
        items.CopyTo(array, index);
    }

    public IEnumerator GetEnumerator()
    {
        return items.GetEnumerator();
    }

    public object SyncRoot
    {
        get { return items.SyncRoot; }
    }

    public bool IsSynchronized
    {
        get { return items.IsSynchronized; }
    }

    object ICloneable.Clone()
    {
        return items.Clone();
    }

    #region ICollection and IList members implementation

    // hides this members from intellisense, see: http://stackoverflow.com/questions/10110205/how-does-selectedlistviewitemcollection-implement-ilist-but-not-have-add

    int ICollection.Count
    {
        get { return items.Length; }
    }

    int IList.Add(object value)
    {
        throw new NotImplementedException();
    }

    bool IList.Contains(object value)
    {
        throw new NotImplementedException();
    }

    void IList.Clear()
    {
        throw new NotImplementedException();
    }

    int IList.IndexOf(object value)
    {
        throw new NotImplementedException();
    }

    void IList.Insert(int index, object value)
    {
        throw new NotImplementedException();
    }

    void IList.Remove(object value)
    {
        throw new NotImplementedException();
    }

    void IList.RemoveAt(int index)
    {
        throw new NotImplementedException();
    }

    object IList.this[int index]
    {
        get { throw new NotImplementedException(); }
        set { throw new NotImplementedException(); }
    } 

    #endregion

}
4

5 に答える 5

2

LINQを使用して電話することはできません

array.Last()

?(.NET3.5以降および"using System.Linq;")

.NET2ソリューション:(カウント==0の場合、IndexOutOfRangeを除く)

public class MyList<T> : List<T>
{
    public T Last
    {
        get
        {
             return this[this.Count - 1];
        }
    }
}
于 2012-07-17T08:31:21.283 に答える
2

Linq を使用できないため、拡張メソッドまたはその他は、静的メソッドを使用して Utility クラスを追加するだけです。

public static class ArrayUtility
{
    public static double Last(double[] items)
    {
        return items[items.Length -1]);
    }
}

それ以外の場合は、を使用する必要がない場合はarray、単に使用してくださいList<double>

使っていくならList<double>。呼び出しAdd(YourNewDouble)はそれを行います。キューまたはスタックの動作が必要な場合。Netには、そのためのクラスがあります: Queue<T>、スタック。

于 2012-07-17T08:41:47.070 に答える
1

これが私を満足させる解決策です。C# 3.0 拡張機能は、次のコードを追加するだけで .NET 2.0 で使用できます。

#if NET20
namespace System.Runtime.CompilerServices
{
    [AttributeUsageAttribute(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)]
     public class ExtensionAttribute : Attribute
    {
    }
}
#endif

その後、次の拡張メソッド (および他の多くのメソッド) を使用できます。

public static class DoubleArrayExtension
{
    // This is the extension method.
    // The first parameter takes the "this" modifier
    // and specifies the type for which the method is defined.       
    public static double Last(this double[] items)
    {
        return items[items.Length - 1];
    }

}

皆さんのヒントや提案をありがとう!

于 2012-07-18T08:24:24.313 に答える
0

ファイルの先頭に追加using System.Linq;して、コードでLinq式を使用できるようにします。items.Last()最後の配列項目を返します。

これが完全なLinqメソッドリストです

于 2012-07-17T08:31:50.557 に答える
0

クラスを使用するListか、同じ機能を実現する必要があります

適切でない場合Listは、静的な方法を使用Array.Resize(param)し、Array.Copy(param)

于 2012-07-17T08:30:48.653 に答える