c# - 错误“参数是值,而参数声明为”是什么意思?
问题描述
在netstandard 2.0
应用程序中,我有以下方法,它是静态类的一部分:
public static class Argument
{
/// <param name="inst">Inst.</param>
/// <param name="instName">Inst name.</param>
/// <exception cref="ArgumentException">
/// Thrown if :
/// <paramref name="inst" /> is not specified in a local time zone.
/// </exception>
public static void ThrowIfIsNotLocal(in DateTime inst, string instName)
{
if (inst.Kind != DateTimeKind.Local)
throw new ArgumentException(instName, $"{instName} is not expressed in a local time-zone.");
}
}
在我正在运行的程序中.netcore 2.0
,我有以下行会产生错误:
Argument.ThrowIfIsNotLocal(DateTime.Now, "timestamp");
参数是值,而参数声明为
为什么会DateTime.Now
导致出现错误?
解决方案
方法签名声明参数需要通过引用传递,而不是通过值传递。这意味着您需要有某种可以引用的存储位置以传递给该方法。
属性 getter 的结果不是变量;这不是你可以参考的东西。它只是一个值,因此是错误消息。
您需要有一个变量,而不仅仅是一个值,并且in
在调用方法时还需要使用关键字来指示您打算传递对变量的引用,而不仅仅是变量的值。
var now = DateTime.Now;
ThrowIfIsNotLocal(in now, "");
当然,首先没有真正的理由通过引用传递这个变量。我建议不要这样做,而只是按值传递参数。这样,当调用者只有一个值而不是变量时,他们就不需要经历所有这些。
推荐阅读
- python - Paramiko / Netmiko SSH 错误 - 'paramiko.buffered_pipe.PipeTimeout'
- html - 如何使语音气泡出现在文本中的悬停上
- c++ - c ++我如何添加一个双精度和一个字符串来制作一个字符串?
- odoo - 在 Odoo10 中更新树中的兄弟行
- excel - 如何使用 VBA 正确获取 Word 中光标的位置?
- javascript - Angular 测试,模拟服务,只是构建其他服务
- php - 如何识别调用 API 端点的应用或网站?
- java - Spring JPA 保存并不总是在 DB 上执行
- kotlin - 如何将我作为参数传递的函数定义为可为空的?
- oracle - 从 Oracle 中的一组表中导出数据