C#中为自定义函数设置可选结构体参数报错求助
问题原因
FooBah是结构体(值类型),C#里值类型默认不能为null,所以你给CustomFunction的参数设置默认值null才会触发报错。
解决方法
下面是几种可行的方案:
方案一:使用可空结构体
把参数类型改成FooBah?(可空值类型),这样就能用null作为默认参数了:
private void CustomFunction(FooBah? foobah = null) { if(foobah.HasValue) { // 通过foobah.Value访问结构体成员 string targetFoo = foobah.Value.foo; string targetBah = foobah.Value.bah; // 执行你的逻辑 } }
调用时可以正常传FooBah实例,也可以直接调用CustomFunction()使用默认的null。
方案二:用default作为默认参数
结构体默认有隐式无参构造,会把成员初始化为默认值(string类型就是null),你可以用default作为参数默认值:
private void CustomFunction(FooBah foobah = default) { // 判断是否是有效实例(比如检查成员是否不为空) if(!string.IsNullOrEmpty(foobah.foo) || !string.IsNullOrEmpty(foobah.bah)) { // 执行你的逻辑 } }
这种方式不需要修改参数类型,直接用原结构体类型即可。
方案三:重载函数
写一个不带参数的重载版本,内部调用带参数的版本并传入默认实例:
// 无参重载,使用默认的FooBah实例 private void CustomFunction() { CustomFunction(new FooBah(null, null)); } // 带参数的原函数 private void CustomFunction(FooBah foobah) { if(!string.IsNullOrEmpty(foobah.foo) || !string.IsNullOrEmpty(foobah.bah)) { // 执行你的逻辑 } }
调用时可以根据需求选择带参或无参调用,逻辑分离更清晰。
内容的提问来源于stack exchange,提问作者Ric
相关产品推荐
相关产品推荐

