いつものように、ヘルプ/コメントの考えは常に高く評価されており、私のプログラミングの素朴さをお詫びします.
ブロックのランダム化を含む将来の研究で使用できる、広く適用可能な関数を作成しようとしています。PatientDataCollection の各メンバーには、interventionArm、givenDrugX などの名前のブール プロパティがあります。この関数は、ブロック サイズに応じて (疑似) ランダムに研究のアームに割り当てることを目的としています。つまり、ブロック サイズが 8 の場合、4 が治療に割り当てられ、4 が対照 (治療なし) に割り当てられます。
これまでのコード:
public static bool nextAllocation<T>(int blockSize, IEnumerable<T> patientDataCollection, string allocationPropertyName)
{
int remainingAllocations = blockSize - patientDataCollection.Count();
if (remainingAllocations <= 0) throw new Exception("All alocations within block accounted for");
var p = typeof(T).GetProperty(allocationPropertyName);
int remainingInterventions = blockSize/2 - patientDataCollection.Count(c => c.p);
double Pintervention = (double)remainingInterventions / (double)remainingAllocations;
double rdm = new Random().NextDouble();
return (rdm <= Pintervention);
}
変数 p は linq ステートメントの patientDataCollection.Count(c => cp) で参照されている cp に関連していないため、これはもちろん欠陥のあるロジックです。明らかに、このステートメントは、真の値を持つすべての要素を数えるだけです。
ASPは4.0です。誰でもこれを達成する方法を見ることができますか