1

この型を考えてみてください。私ができる限り不変でしょうか?

public struct SomeType
{
    public const int OneValue = 1;

    private static readonly one = new SomeType(one);

    private readonly int value;

    private SomeType(int value)
    {
        this.value = value;
    }

    public static One
    {
        get { return this.one; }
    }

    public static implicit operator int(SomeType source)
    {
        return source.value;
    }

    public void SomeSpecialization()
    {
    }
}

これにより、これを行うことができます。

var one = SomeType.One;

switch (one)
{
    case SomeType.OneValue:
        ...
}

しかし、とにかく私が削除できるものはありますか

public static implicit operator int(SomeType source)
    {
        return source.value;
    }

型定義から、このような型を使用しますか?

var one = SomeType.One;

switch (one)
{
    case SomeType.One:
        ...
}
4

3 に答える 3

2

ステートメント内のcase式は、switch特定の組み込み型およびenumのコンパイル時定数のみにすることができます。SomeTypeしたがって、答えはノーです。 ( に変換する以外に)何を行うにしても、オブジェクトを式としてenum使用することはできません。SomeTypecase

于 2012-10-01T11:21:08.510 に答える
1

を使用しない場合はEnum、静的クラスを試してください。

public static class SomeType
{
    public const int OneValue = 1;
    public const int SecondValue = 2;
}
于 2012-10-01T11:29:23.630 に答える
0

これは何か役に立ちますか?

public struct SomeType<T> where T : IConvertible
{
    private static readonly T _one = (T)Convert.ChangeType(1, typeof(T));
    public static T One { get { return _one; } }
}
于 2012-10-01T11:23:20.347 に答える