我已经下载了QRCoder源代码,并使用VisualStudio2019编译了这些源代码。然后,我在Visual 2008项目上添加一个引用到从文件夹“QRCODER.dll”生成的net35。
然后我试着开始一个小小的演示:
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);
}所以问题是:为什么我不能用两个参数(字符串和错误级别)调用这个方法?
我的解决方案是显式地添加一个带有两个参数的方法(在源文件中),并从这个方法的主体中调用带有默认值的方法。之后,我在Visual 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);
}发布于 2021-04-27 10:40:51
确实支持方法中的framework.net 3.5默认值
.NET框架支持3.5版中的可选参数(根据作为框架一部分的属性),但C# 3编译器( Visual 2008使用的编译器)不支持。可选参数和命名参数是在C# 4中引入的。
我强烈建议使用现代版本的Visual,即使您仍然需要针对.NET的旧版本(如果可能的话,我也强烈建议移除不受支持的.NET版本)。
https://stackoverflow.com/questions/67281341
复制相似问题