0

匿名値のブロックに情報を保存しようとしています

//holds all info
var jobs = new { newJob, numBytes, requiredTime };

次に、その情報を取得して、単一の要素としてリストに配置します

//puts above info into a list
joblist.Add(Convert.ToString(jobs));
Console.WriteLine(joblist[0]);   //testing purposes

今、私がやりたいことは、joblist を呼び出して、位置 4 で例の numBytes の値を取得できるようにすることです。

これは可能ですか?または、誰かがこれを行う別の方法を手伝ってもらえますか? どうもありがとう!

4

3 に答える 3

1

名前付きクラスを作成します。次に、そのタイプのオブジェクトのリストを取得し、そのリストを任意の方法で操作できます。

クラスを使用することは、あなたがやろうとしていることのベストプラクティスです。デフォルトでは、カスタム クラスで構成されるオブジェクト モデルに構造化データを格納することを検討する必要があります。動的を使用することを提案している別の答えがここにあります-これは有効であり、その場所がありますが、それは最後の手段の解決策です。あなたが望むのは、豊富なクラスと静的型付けである C# の長所を活用することです。匿名型も静的に型付けされますが、型に名前を付けることができないため、それらを保持するために静的に型付けされたリストを宣言することはできません。また、メソッドの戻り値の型として使用することもできません。

于 2013-10-06T15:17:27.373 に答える
0

C# で行う "通常の" ことは、格納する情報を保持するクラスを作成することです。例えば:

public class Job
{
    public string Name { get; set; }
    public int NumBytes { get; set; }
    public DateTime RequiredTime { get; set; }
}

次に、これらをリストに追加できます。

var jobs = new List<Job>();

var aJob = new Job();
aJob.Name = "Job 1";
aJob.NumBytes = 123;

jobs.add(aJob);

次に、リスト内のインデックスでジョブにアクセスできます。

var jobNumBytes = jobs[3].NumBytes;

C# について注意すべき点が 1 つあります。

new { newJob, numBytes, requiredTime };

コンパイラは、ビルド時に、厳密に型指定されたクラス (Job上記で作成したクラスと同様) を作成し、ランダムな名前を生成します。割り当てている変数から、プロパティの名前と型を推測します。作成された .exe または .dll には、実際にはこの型のクラス定義が含まれていますが、コード内の他の場所から簡単にアクセスすることはできません。真の「動的」ではありません。したがって、その構文を使用することは、通常、ちょっとだけ必要なクラスを宣言するための怠惰な方法です。通常は 1 つのメソッド内にあり、それ以上は必要ありません。名前付きクラスを作成することは、通常、やりたいことです。

于 2013-10-06T15:30:25.680 に答える
0

実際、 「今、私がやりたいことは、ジョブリストを呼び出して、たとえば位置 4 の numBytes を削除できるようにすることです」という意味が正確にはわかりません。

しかし、オブジェクトをリストに入れて numBytes をクエリし、いくつかの要素を削除したいだけだと思います。

ダイナミクスを使用すると、動的オブジェクトを処理できます...

var jobs = new List<dynamic>();
for (int i = 0; i < 100; i++)
{
    string newJob = "Job" + i;
    int numBytes = i;
    TimeSpan requiredTime = new TimeSpan(0,0,i);
    //holds all info
    var job = new { newJob, numBytes, requiredTime };
    jobs.Add(job);
}

jobs.RemoveAll(p => p.numBytes > 50);

これの代わりに、あなたの質問の下のコメントに同意し、必要なプロパティを保持する通常のクラスを作成し、そのインスタンスをリストに入れるだけです。ダイナミクスは非常にまれな状況でのみ使用する必要があり、あなたの状況は非常に特別なようには聞こえません。

于 2013-10-06T15:23:56.467 に答える