gpt4 book ai didi

c# - 在 C# 中模拟可选 "out"参数的模式?

转载 作者:行者123 更新时间:2023-11-30 15:10:41 25 4
gpt4 key购买 nike

我正在将一个 API 从 C 转换为 C#,其中一个函数分配了许多相关对象,其中一些是可选的。 C 版本接受几个指针参数,用于返回对象的整数句柄,调用者可以为某些指针传递 NULL 以避免分配这些对象:

void initialize(int *mainObjPtr, int *subObjPtr, int *anotherSubObjPtr);

initialize(&mainObj, &subObj, NULL);

对于 C# 版本,明显的翻译是使用 out 参数而不是指针:

public static void Initialize(out int mainObj, out int subObj,
out int anotherSubObj);

...但这没有办法指出哪些对象是不需要的。是否有任何著名的 C# API 示例可以做我可以模仿的类似事情?如果没有,有什么建议吗?

最佳答案

好吧,您无论如何都不应该对对象使用 int - 它们应该是引用,即 out SomeMainType mainObj,out SomSubType subObj。完成后,您就可以使用重载,但这会很笨拙。

更好的方法是使用 3 个对象返回一些东西 - 一个自定义类型,或者在 .NET 4.0 中可能是一个元组。

类似于:

class InitializeResult {
public SomeMainType MainObject {get;set;}
public SomeSubType SubObject {get;set;}
...
}
public static InitializeResult Initialize() {...}

重新阅读它,看起来调用者也在 in 中传递数据(即使只是 null/not-null),所以 outnever 正确的选择。也许是标志枚举?

[Flags]
public enum InitializeOptions {
None = 0, Main = 1, Sub = 2, Foo = 4, Bar = 8, ..
}

并调用:

var result = Initialize(InitializeOptions.Main | InitializeOptions.Sub);
var main = result.MainObject;
var sub = result.SubObject;

关于c# - 在 C# 中模拟可选 "out"参数的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3031464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com