C# 中不考虑默认值参数
Default values parameters not taken into account in C#
我已经下载了 QRCoder 源代码,并用 Visual studio 2019 编译了源代码。
然后我将我的 Visual stuio 2008 项目的引用添加到文件夹“net35”中生成的 QRCODER.dll。
然后我尝试开始一个小演示:
QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode("The text which should be encoded.",
QRCodeGenerator.ECCLevel.Q);
QRCode qrCode = new QRCode(qrCodeData);
编译器报错说没有找到匹配的方法(我只传递了一个字符串和一个错误级别)。在源代码中,我看到了带有默认值的方法签名:
public QRCodeData CreateQrCode(string plainText, ECCLevel eccLevel, bool forceUtf8 = false, bool utf8BOM = false, EciMode eciMode = EciMode.Default, int requestedVersion = -1)
{
return GenerateQrCode(plainText, eccLevel, forceUtf8, utf8BOM, eciMode, requestedVersion);
}
所以问题是:为什么我不能调用只有 2 个参数(字符串和错误级别)的方法?
我的解决方案是显式添加一个带有 2 个参数的方法(在源文件中),并从该方法的主体中使用默认值调用该方法。之后,我在 Visual studio 2008 编译并引用了我的项目中的 dll,现在,编译器不再给出错误......方法中是否支持 theframework.net 3.5 默认值......或者……?
/// <summary>
/// Calculates the QR code data which than can be used in one of the rendering classes to generate a graphical representation.
/// </summary>
/// <param name="plainText">The payload which shall be encoded in the QR code</param>
/// <param name="eccLevel">The level of error correction data</param>
/// <param name="forceUtf8">Shall the generator be forced to work in UTF-8 mode?</param>
/// <param name="utf8BOM">Should the byte-order-mark be used?</param>
/// <param name="eciMode">Which ECI mode shall be used?</param>
/// <param name="requestedVersion">Set fixed QR code target version.</param>
/// <exception cref="QRCoder.Exceptions.DataTooLongException">Thrown when the payload is too big to be encoded in a QR code.</exception>
/// <returns>Returns the raw QR code data which can be used for rendering.</returns>
public QRCodeData CreateQrCode(string plainText, ECCLevel eccLevel, bool forceUtf8 = false, bool utf8BOM = false, EciMode eciMode = EciMode.Default, int requestedVersion = -1)
{
return GenerateQrCode(plainText, eccLevel, forceUtf8, utf8BOM, eciMode, requestedVersion);
}
public QRCodeData CreateQrCode(string plainText, ECCLevel eccLevel)
{
return GenerateQrCode(plainText, eccLevel);
}
Does support the framework.net 3.5 default value in the method
.NET Framework 在 3.5 版中支持可选参数(就作为框架一部分的属性而言),但 C# 3 编译器(Visual Studio 2008 使用的)不支持。 C# 4 中引入了可选参数和命名参数。
我强烈建议使用 Visual Studio 的现代版本,即使您仍然需要以旧版本的 .NET 为目标。 (我还强烈建议尽可能移除不受支持的 .NET 版本。)
我已经下载了 QRCoder 源代码,并用 Visual studio 2019 编译了源代码。 然后我将我的 Visual stuio 2008 项目的引用添加到文件夹“net35”中生成的 QRCODER.dll。
然后我尝试开始一个小演示:
QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode("The text which should be encoded.",
QRCodeGenerator.ECCLevel.Q);
QRCode qrCode = new QRCode(qrCodeData);
编译器报错说没有找到匹配的方法(我只传递了一个字符串和一个错误级别)。在源代码中,我看到了带有默认值的方法签名:
public QRCodeData CreateQrCode(string plainText, ECCLevel eccLevel, bool forceUtf8 = false, bool utf8BOM = false, EciMode eciMode = EciMode.Default, int requestedVersion = -1)
{
return GenerateQrCode(plainText, eccLevel, forceUtf8, utf8BOM, eciMode, requestedVersion);
}
所以问题是:为什么我不能调用只有 2 个参数(字符串和错误级别)的方法?
我的解决方案是显式添加一个带有 2 个参数的方法(在源文件中),并从该方法的主体中使用默认值调用该方法。之后,我在 Visual studio 2008 编译并引用了我的项目中的 dll,现在,编译器不再给出错误......方法中是否支持 theframework.net 3.5 默认值......或者……?
/// <summary>
/// Calculates the QR code data which than can be used in one of the rendering classes to generate a graphical representation.
/// </summary>
/// <param name="plainText">The payload which shall be encoded in the QR code</param>
/// <param name="eccLevel">The level of error correction data</param>
/// <param name="forceUtf8">Shall the generator be forced to work in UTF-8 mode?</param>
/// <param name="utf8BOM">Should the byte-order-mark be used?</param>
/// <param name="eciMode">Which ECI mode shall be used?</param>
/// <param name="requestedVersion">Set fixed QR code target version.</param>
/// <exception cref="QRCoder.Exceptions.DataTooLongException">Thrown when the payload is too big to be encoded in a QR code.</exception>
/// <returns>Returns the raw QR code data which can be used for rendering.</returns>
public QRCodeData CreateQrCode(string plainText, ECCLevel eccLevel, bool forceUtf8 = false, bool utf8BOM = false, EciMode eciMode = EciMode.Default, int requestedVersion = -1)
{
return GenerateQrCode(plainText, eccLevel, forceUtf8, utf8BOM, eciMode, requestedVersion);
}
public QRCodeData CreateQrCode(string plainText, ECCLevel eccLevel)
{
return GenerateQrCode(plainText, eccLevel);
}
Does support the framework.net 3.5 default value in the method
.NET Framework 在 3.5 版中支持可选参数(就作为框架一部分的属性而言),但 C# 3 编译器(Visual Studio 2008 使用的)不支持。 C# 4 中引入了可选参数和命名参数。
我强烈建议使用 Visual Studio 的现代版本,即使您仍然需要以旧版本的 .NET 为目标。 (我还强烈建议尽可能移除不受支持的 .NET 版本。)