我有一堂課,我用正常的public Class1(int arg1, int arg2, int arg3) { ... }
進行初始化,這很簡單。 但是我想實現的是參數需要改變。 例如,如果您將1
傳遞給arg1
,則第二個和第三個參數不會採用Int而是採用float。C#類初始化不同的參數?
是否可以在C#.NET Core中完成? 如果不是,那麼C#中是否有可能? 又如何?
我有一堂課,我用正常的public Class1(int arg1, int arg2, int arg3) { ... }
進行初始化,這很簡單。 但是我想實現的是參數需要改變。 例如,如果您將1
傳遞給arg1
,則第二個和第三個參數不會採用Int而是採用float。C#類初始化不同的參數?
是否可以在C#.NET Core中完成? 如果不是,那麼C#中是否有可能? 又如何?
你爲什麼不只是創建兩個不同的重載構造這樣的:
public Class1(int arg1, int arg2, int arg3) {
if(arg1 == 1) {
throw new InvalidOperationException("Wrong constructor");
}
...
}
public Class1(int arg1, float arg2, float arg3) {
if(arg1 != 1) {
throw new InvalidOperationException("Wrong constructor");
}
...
}
或者,如果你喜歡它,沒有例外容易一點(這將是我的首選方式):
public Class1(int arg1, float _arg2, float _arg3) {
if(arg1 != 1) { // Your int constructor, use arg2 and arg3 vars declared below
int arg2 = (int) _arg2;
int arg3 = (int) _arg3;
...
} else {
// Your float constructor, use the _arg2 and _arg3 as your floats
...
}
}
您想要的解決方案,以改變變量es在運行時是不可能的,但我認爲我發佈的最後一個代碼非常接近。
很好解釋,謝謝!那樣做了。但浮動物只是一個例子。我正在採取字符串或整數。但第一種選擇正是我所期待的。 –
可以重載的構造函數
public Class1(int arg1, float arg3)
如果這樣做了,那麼消費者可以決定使用哪個超載,而不考慮arg1的值。 –
所以我找到了另一個答案。
您可以使用所有參數創建一個構造函數,然後允許它們爲null,然後檢查哪些元素爲null,哪些是設置的。
可能不是做的最好的方式,但它的作品...不是要去使用它,但只要一想到它......
這聽起來像你問的是構造函數重載。你可以在你的對象上創建許多不同的構造函數。 – David
這聽起來像一個奇怪的事情 - 爲什麼你需要使類型依賴於第一個參數?爲什麼不創建不同的重載(並跳過第一個參數)? – UnholySheep
不,這是不可能的。你可能想描述你想要達到的目標,我們可以幫助你選擇其他方法。 –