こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C#で独自の型を定義したい

C# 2010 version 4.0を使用しています。
次のようなint型とstring型を混合したMixedという型を定義したいのですが、

public class Mixed
{
private int _TheInt = 0;
public int TheInt
{
get { return _TheInt; }
set { _TheInt = value; }
}

private string _TheString = null;
public string TheString
{
get { return _TheString; }
set { _TheString = value; }
}

public static implicit operator int(Mixed m)
{
return m.TheInt;
}

public static implicit operator Mixed(int x)
{
Mixed m = new Mixed();
m.TheInt = x;
return m;
}

public static implicit operator string(Mixed m)
{
return m.TheString;
}

public static implicit operator Mixed(string x)
{
Mixed m = new Mixed();
m.TheString = x;
return m;
}
}


//Mixed m = 1;
//Console.WriteLine(m); //これだとコンパイルエラーになる
//Console.WriteLine(m.TheInt.ToString()); //「1」と表示される
int i = 1;
Console.WriteLine(i); //「1」と表示される
object o = 1;
Console.WriteLine(o); //「1」と表示される


Console.WriteLineなどで表示する場合に
例えばint型なら
int i = 1;
Console.WriteLine(i); //「1」と表示される
という具合にそのまま「1」と表示されます。
でもこのMixedの場合、
Mixed m = 1;
Console.WriteLine(m.TheInt.ToString()); //「1」と表示される
これでは「1」と表示されるのですが、
Console.WriteLine(m); //これだとコンパイルエラーになる
このやり方だとエラーになります。
なんとかしてint型やobject型のようにToString()を使わずに
表示させることはできないでしょうか?

投稿日時 - 2012-10-29 14:03:28

QNo.7771813

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちは。

このMixed型はint型にもstring型にも暗黙の型変換ができるため、
コンパイラからすると、
「Console.WriteLine(int value)とConsole.WriteLine(string value)の
どちらを呼び出せばいいの?」ということになってしまいます。

なので、キャストしてどちらの型に変換するかを明示する必要があります。
Console.WriteLine((int)m); または Console.WriteLine((string)m);
とすると、期待した動作になります。

投稿日時 - 2012-10-29 14:47:00

お礼

ご回答ありがとうございます。
なるほど、参考になりました。

投稿日時 - 2012-10-29 16:26:53

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問