C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 複数の型のインデクサ


(過去ログ 36 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■18257 / inTopicNo.1)  複数の型のインデクサ
  
□投稿者/ tanaka (49回)-(2008/05/12(Mon) 13:49:03)

分類:[C#] 

複数の型のパラメータをインデクサを使用して処理してますが
この場合取得した側で型変換させているのでこれをclass TESTの方で対処して
取得する側はそのまま使用するにはどのようにすればいいのでしょうか。

【例】
class TEST
{
    // [0]:int
    // [1]:byte
    // [2]:char
    // [3]:string
    private static object[] Parameter = new object[4]; 
    public string this[int index]
    {
        get{return Parameter[index];}
        set{Parameter[index] = value;}
    }
}

class Main
{
    void Main()
    {
        int    a;
        byte   b;
        char   c;
        string d;

        TEST param = new TEST();
        a = Convert.ToInt32(param[0]);
        b = Convert.ToByte(param[1]);
        c = Convert.ToChar(param[2]);
        d = Convert.ToString(param[3]);

        // 以下のように処理したい
        // a = param[0];
        // b = param[1];
        // c = param[2];
        // d = param[3];
    }
}

引用返信 編集キー/
■18258 / inTopicNo.2)  Re[1]: 複数の型のインデクサ
□投稿者/ シャノン (399回)-(2008/05/12(Mon) 14:05:03)
No18257 (tanaka さん) に返信
> 複数の型のパラメータをインデクサを使用して処理してますが
> この場合取得した側で型変換させているのでこれをclass TESTの方で対処して
> 取得する側はそのまま使用するにはどのようにすればいいのでしょうか。
>
> 【例】
> class TEST
> {
> // [0]:int
> // [1]:byte
> // [2]:char
> // [3]:string
> private static object[] Parameter = new object[4];
> public string this[int index]
> {
> get{return Parameter[index];}
> set{Parameter[index] = value;}
> }
> }
>
> class Main
> {
> void Main()
> {
> int a;
> byte b;
> char c;
> string d;
>
> TEST param = new TEST();
> a = Convert.ToInt32(param[0]);
> b = Convert.ToByte(param[1]);
> c = Convert.ToChar(param[2]);
> d = Convert.ToString(param[3]);
>
> // 以下のように処理したい
> // a = param[0];
> // b = param[1];
> // c = param[2];
> // d = param[3];
> }
> }

型が違うものをインデクサで返したり、文字列でないものを文字列で返したりする設計はお勧めできません。
例えば、こういうわけにはいかんのですか? インデクサであることは必須ですか?

class Value
{
 public int Integer{ get; set; }
 public byte Byte{ get; set; }
 public char Char{ get; set; }
 public string String{ get; set; }
}

class Test
{
 public Value Value { get; set; }
}

class Program
{
 void Main()
 {
  Test test = new Test();
  Value value = test.Value;
  int a = value.Integer;
  byte b = value.Byte;
  char c = value.Char;
  string d = value.String;
 }
}
引用返信 編集キー/
■18267 / inTopicNo.3)  Re[2]: 複数の型のインデクサ
□投稿者/ tanaka (50回)-(2008/05/12(Mon) 15:44:55)
No18258 (シャノン さん) に返信
> ■No18257 (tanaka さん) に返信
>>複数の型のパラメータをインデクサを使用して処理してますが
>>この場合取得した側で型変換させているのでこれをclass TESTの方で対処して
>>取得する側はそのまま使用するにはどのようにすればいいのでしょうか。
>>
>>【例】
>>class TEST
>>{
>> // [0]:int
>> // [1]:byte
>> // [2]:char
>> // [3]:string
>> private static object[] Parameter = new object[4];
>> public string this[int index]
>> {
>> get{return Parameter[index];}
>> set{Parameter[index] = value;}
>> }
>>}
>>
>>class Main
>>{
>> void Main()
>> {
>> int a;
>> byte b;
>> char c;
>> string d;
>>
>> TEST param = new TEST();
>> a = Convert.ToInt32(param[0]);
>> b = Convert.ToByte(param[1]);
>> c = Convert.ToChar(param[2]);
>> d = Convert.ToString(param[3]);
>>
>> // 以下のように処理したい
>> // a = param[0];
>> // b = param[1];
>> // c = param[2];
>> // d = param[3];
>> }
>>}
>
> 型が違うものをインデクサで返したり、文字列でないものを文字列で返したりする設計はお勧めできません。
> 例えば、こういうわけにはいかんのですか? インデクサであることは必須ですか?
>
> class Value
> {
>  public int Integer{ get; set; }
>  public byte Byte{ get; set; }
>  public char Char{ get; set; }
>  public string String{ get; set; }
> }
>
> class Test
> {
>  public Value Value { get; set; }
> }
>
> class Program
> {
>  void Main()
>  {
>   Test test = new Test();
>   Value value = test.Value;
>   int a = value.Integer;
>   byte b = value.Byte;
>   char c = value.Char;
>   string d = value.String;
>  }
> }

試行錯誤の結果全てプロパティでやることにしました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -