gpt4 book ai didi

c# - 如何在C#中将可选参数的OptionalAttribute设置为当前目录?

转载 作者:太空宇宙 更新时间:2023-11-03 17:31:12 25 4
gpt4 key购买 nike

我正在使用新的.Net 4.5功能在这样的方法签名中将Optional参数指定为OptionalAttribute(请参见MSDN)。

public void GenerateReport(int ReportId, [Optional] string saveToFolderPath)


这很好。

如果未传递可选的 saveToFolderPath参数,我想使用静态方法 saveToFolderPathDirectory.GetCurrentDirectory的值设置为当前工作目录。

当我尝试输入时,出现以下警告/错误。


  属性参数必须是常量表达式,typeof表达式
  或属性参数类型的数组创建表达式




那么,我的选择是否仅限于检查方法中的 saveToFolderPath参数是 null还是空,而不是检查签名本身?

换句话说,我的问题是,如何将使用OptionalAttribute语法的Optional Parameter的值设置为Current Directory?

最佳答案

你不能可选参数的默认值作为常数存储在IL中。 “当前目录”不是常量,因此不能用作默认值。

最容易想到的是将可选值设置为null,在这种情况下使用当前目录:

// Use the C# syntax for this, rather than specifying the attribute explicitly
public void GenerateReport(int ReportId, string saveToFolderPath = null)
{
saveToFolderPath == saveToFolderPath ?? Directory.GetCurrentDirectory();
...
}


我不认为您可以使用属性来显式地进行任何操作,而使用C#语法来处理可选参数则无法进行任何操作,因此您可能会习惯于此。

那确实意味着任何显式通过 null的人都将获得相同的行为,但这可能不是您想要的。如Servy所示,另一种选择是使用两个重载。

关于c# - 如何在C#中将可选参数的OptionalAttribute设置为当前目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22972120/

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