【发布时间】:2021-01-09 23:48:58
【问题描述】:
*假设我有一个类,其构造函数带有一个必需参数和三个可选参数。
public class myClass(int reqInt, string optStr1 = "st1", uint optUint1 = 0, float optFloat =0.0)
{ ... }
我知道,在我的调用代码中,我可以有效地将其视为重载函数,例如
myClass Foo = new myClass(1, "test");
myClass Foo2 = new myClass(2, "hellow world", 4);
甚至
myClass Foo3 = new myClass(3, optFloat : 4.5)
我想不通的是如何动态构建我的参数元组。例如。假设我的数据来自 JSON,我可能会得到以下数组:
[
{ "myInt" : "1"},
{"myInt :"2", "myString" : "word"},
{"myFloat" : "4.5", "myString" : "to" , "myInt" : "3"},
{"myUInt" : "4", "myInt" "-4", "myFloat" : "4.4", "myString" : "yo!"}
]
我显然可以创建 8 个不同的调用者*,但这似乎只是将重载从构造函数转移到调用者。但是我不知道如何动态构建元组,尤其是使用命名参数/别名,所以我只有 1 个调用函数。
数组列表似乎可以工作,但是(我认为)我需要使用命名参数,因为在某些情况下我没有可选参数 1,但确实有 2 或 3(或其任何组合) .
这不可能是极端情况,但我没有找到任何在我的搜索中有效的东西(我大部分时间都不在 C# 或任何强类型语言中工作,所以请原谅我,如果这是一个非常基本的问题)。
*意思是,假设我已经将我的 Json 反序列化为 myJson ,我可以这样做:
If(myJson.myString.hasValue){
if(myJson.myString.hasValue){
if(myJson.myUInt.hasValue){
if(myJson.myFloat.hasValue){
(int, string, uint, float) myParams = (reqint: myJson.myInt, optStr1: myJson.myString, optUint1: myJson.myUInt, optFloat: myJson.myFloat)
} else if
...
以此类推,递归地构建 8 种可能的情况。但这似乎真的很冗长......
【问题讨论】:
-
也许这个有用? params
标签: c# constructor optional-parameters