1

私は C# の初心者で、新しいコードを試しています。次のコードは、値を正しく出力しません。

namespace systemTypes
{
    class Program
    {
        static void Main(string[] args)
        {
             CommonData<string>name = new CommonData<string>();
             name.Value = "abcd";
             CommonData<float>version = new CommonData<float>();
             version.Value = 2.0F;
             Console.WriteLine(
                 "generic object storing string val : {0}",
                 name.Value);
             Console.WriteLine(
                 "generic object storing float val : {0}",
                 version.Value);
         }
    }

    public class CommonData<T>
    {
        private T _data;
        public T Value
        {
            get
            {
                return this._data;
            }
            set
            {
                this._data = value;
            }
        }
    }
}

文字列値の場合は空白、int 値の場合はゼロをコンソールに出力します。デフォルトのコンストラクターを実装する必要がありますか? ここで何が欠けていますか?

4

3 に答える 3

2

コンパイラは、これは間違っていると言ったでしょう:

CommonData<int>version = new CommonData<float>();

コンパイラは次のように述べています。

エラー 1 タイプ 'systemTypes.CommonData' を 'systemTypes.CommonData' に暗黙的に変換できません some.cs 10 39 someproject

現時点ではコンパイルされていないため、おそらくゼロがハードコードされた古いバージョンを実行しています。あなたが示したコードを実行していません。

作業コードは次のようになります。

CommonData<float>version = new CommonData<float>();

ただし、言いすぎて迷惑をかけることもあります。var初めてうまくいったでしょう:

var name = new CommonData<string>();
name.Value = "abcd";
var version = new CommonData<float>();
version.Value = 2.0F;
Console.WriteLine("generic object storing string val : {0}", name.Value);
Console.WriteLine("generic object storing float val : {0}", version.Value);

ここでは、var単に「コンパイラ: 右側に何が表示されているかを確認できます。変数の型を調べてください」という意味です。「バリアント」や「動的」などの意味ではありません。

于 2012-08-09T19:32:02.810 に答える
1

これはコンパイル時エラーです。のジェネリック型を宣言していますが、 修正された行で'int'インスタンス化しています'float'

CommonData<float> version = new CommonData<float>();
于 2012-08-09T19:35:13.313 に答える
1

次の行にコンパイル エラーがあるためです。

CommonData<int>version = new CommonData<float>();

具体的には:

エラー CS0029: 型Test.CommonData<float>を暗黙的に変換できませんTest.CommonData<int>

エラー CS0031: 定数値2をに変換できませんint

古いバイナリを実行している可能性があります。コンパイル エラーを修正し、問題が解決しないかどうかを確認します。

それを修正するには:

  1. 型引数が一致していることを確認してください。またはのいずれintかを選択しますfloatvarまたは、左側のキーワードで変数を宣言します。var version = new CommonData<float>();

  2. 手順 1 で選択した型に一致するリテラルをプロパティに割り当てValueます。を選択した場合はint、 を使用します2。を選択した場合はfloat、 を使用します2.0f

于 2012-08-09T19:33:32.927 に答える