我有一個只有一個變數的類
public class C
{
int i;
}
在另一個專案檔案中,我創建了一個類陣列
C[] classes = new C[100000];
那么我需要做什么來為每個類中的“i”變數設定一些隨機值?
uj5u.com熱心網友回復:
首先,您需要使其C.i可訪問。一種方法是制作C.i公共財產。當您使用它時,公共欄位應該是 pascal 大小寫的,并且所有識別符號都應該具有有意義的名稱。
在命名
public型別的成員時,例如欄位、屬性、事件、方法和本地函式,請使用 pascal 大小寫。
public class Foo {
public int Bar { get; set; }
}
然后你會使用System.Random. 將它實體化一次并在Random.Next每次需要亂數時呼叫。
using System;
var rand = new Random();
// int anyPositiveInt = rand.Next();
// int positiveIntLessThanFifteen = rand.Next(15);
// int intFromOneToFour = rand.Next(1, 5);
最后,按照實施例創建N個物件,并把它們添加到串列中,使用System.Linq的Enumerable.Range,Enumerable.Select和Enumerable.ToArray如下:
Foo[] classes = Enumerable
.Range(0, 100000)
.Select(_ => new Foo { Bar = rand.Next() })
.ToArray();
uj5u.com熱心網友回復:
如果要求是使用私有欄位,那么我放棄早先的建議將其設為公共財產 - 可能尚未教授財產
static void Main()
{
var r = new Random();
var maxValueOfI = 100;
var minValueOfI = -20;
var csArr = new C[100000];
for (var julius = 0; julius < csArr.Length; julius ) {
var brutus = r.Next(minValueOfI, maxValueOfI 1);
csArr[julius] = new C(brutus);
}
}
public class C
{
private int _i;
public C(int i){
_i = i;
}
}
那么,這里發生了什么?
主要添加的是 C 的建構式。建構式是一種特殊的方法,在構造新物件時由 C# 呼叫。即使您看不到,每個類都有一個(如果您看不到,編譯器會提供一個)。建構式是用于確保類完全設定并準備好使用的方法。因為它在類內部,所以它可以完全訪問該類的所有資料欄位:
public C(int i){
_i = i;
}
此建構式接受一個 int,并將私有欄位設定_i為傳入數字的值。將這種命名模式用于欄位(帶下劃線的前綴)是很常見的,它有助于避免與方法引數(在本例中稱為i)的名稱沖突。如果他們都被稱為i班級,則必須以前綴為前綴,this.而且(恕我直言)更混亂
這行代碼呼叫建構式:
csArr[julius] = new C(brutus);
我們之前計算了一個介于 -30 和 100(包括兩端)之間的亂數,并將其存盤在一個名為brutus. 這個數字被傳遞給建構式,當我們說 時呼叫它new C。生成的完全構造的 C 實體存盤在陣列槽之一中
uj5u.com熱心網友回復:
試試這個
static void Main()
{
Random rand = new Random();
var max=100000;
C[] array = new C[max];
for (var i=0; i <max; i )
array[i] = new C { Num = rand.Next(0, max)};
// or using a constructor
array[i] = new C (rand.Next(0, max));
}
public class C
{
public int Num {get; set;}
public C (int num)
{
Num=num;
}
public C (){}
}
uj5u.com熱心網友回復:
首先,在您當前的代碼中i是一個私有欄位。讓我們添加一個建構式來設定這個欄位:
public class C {
int i;
public C(int value) {
i = value;
}
}
然后你可以嘗試使用Linq:
using System.Linq;
...
Random rand = new Random();
...
C[] classes = Enumerable
.Range(0, 100000)
.Select(i => new C(rand.Next(0, 100))) //TODO: Put the right range here
.ToArray();
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/383216.html
上一篇:嘗試從深度嵌套的物件子陣列中過濾掉專案,繼續獲取不存在的屬性和空陣列回應
下一篇:練習-使用多維陣列和函式查找密碼
