- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正面临一个非常奇怪的行为 ValueTuple<T1,T2>
从另一个程序集传递,使用 dynamic
访问.此代码在特定情况下抛出 RuntimeBinderException
在最后一行:
TupleTest(out var t);
(dynamic i1, dynamic i2) = t;
dynamic a = i1.Item1;
消息是:
'System.ValueType' does not contain a definition for 'Item1'
TupleTest
函数在另一个程序集中定义如下:
static void TupleTest(out ValueTuple<dynamic, dynamic> result) {
result = default;
result.Item1 = (new Priv(), new Priv());
result.Item2 = (new Priv(), new Priv());
}
空的地方class Priv { }
没有可见性修饰符。
但是,如果我添加 public class Priv
,问题就消失了。
我知道, Binder 在访问 Priv
的实例成员时可能有问题,但在这种情况下,我还没有做到这一点!我要做的就是访问字段 Item1
的 ValueTuple
.
有趣的是,如果 Priv
实现一些公共(public)接口(interface) IFoo
, 然后替换 result.Item1 = (new Priv(), new Priv());
与 result.Item1 = ((IFoo)new Priv(), (IFoo)new Priv())
允许 dynamic a = i1.Item1
成功。
这是否意味着我不能使用 dynamic
完全访问任何公共(public)字段,其值类型是私有(private)的(只能使用泛型),在别处定义?
最佳答案
发生这种情况是因为 Priv
无法被试图访问它的代码访问。
dynamic
中类型的可访问性必须遵守编译器规则。
不过,错误消息不是很有帮助。
关于c# - 通过动态访问 ValueTuple 项时出现 RuntimeBinderException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53529856/
考虑以下类型: (int, int) → 管理。 struct MyStruct { public (int,int) Value; } → 不受管理! 问题: 非泛型结构 MyStruct ,它有一
我如何检查 ValueTuple 列表的类型是否为 List , 不考虑参数的类型。 可能是: new List() new List() new List() 我尝试过的 public stati
B"H 我正在尝试使用 C# 7 的新元组功能,但遇到了一些问题。实际上,它们工作正常,我不确定是什么改变导致它们损坏。 我正在使用 ASP.Net 4、MVC 5,目标是 .net framewor
命名 ValueTuple 元素时,是否应该大写? (string Name, int Index) rec; 或 (string name, int index) rec; 编辑: 似乎约定是 Pa
我正在尝试使用反射在运行时设置 ValueTuple 的字段,但遇到了问题。我怀疑我不了解 FieldInfo.SetValue 的工作原理。 var a = (5, 5); a.Item1 = 6;
是否可以编写一个 C# 方法来接受具有任意数量的相同类型的值元组并将它们转换为列表? 编辑 2/6/2019我接受了提供的答案作为正确答案。我还想提供一个使用不是接口(interface)的基类的解决
我将返回大型 List 对象作为我的 ValueTuple 中的参数之一。像这样的东西: (bool success, List data string error)> Get(string temp
我有一个用例,我需要检查某个值是否为 C# 7 ValueTuple,如果是,则循环遍历每个项目。我尝试检查 obj is ValueTuple 和 obj is (object, object) 但
我尝试使用 ValueTuple 结构并尝试实现一个不可变的复合键。键由值类型组成。 我试图通过一些单元测试来破坏以下实现,但到目前为止没有成功。我错过了什么吗? 此外,这只是出于好奇,我想了解 Va
当我检查我的缓存以查看我的 ValueTuple 是否在缓存中时,我使用下面的代码。在这种情况下,返回的值为空(也就是缓存中不存在)。当代码运行时,我在第一行收到 object not set to
我在 C# 中尝试 ValueTuple 类,我对属性命名有疑问,让我们看看: 如果实例化一个 ValueTuple 声明这样的对象:var tuple1 = (Name: "Name1", Age:
假设我有一个方法 foo,它返回一个 ValueTuple,其中一个成员是一次性的,例如 (IDisposable, int) . 确保调用方正确处理返回的一次性对象的最佳方法是什么? 我尝试了以下方
我想这可能是一本方便的字典: var myDict = new Dictionary(); 散列会是什么样子? 等效的键类型(结构)是什么样的? 最佳答案 是的,没关系。 ValueTuple fam
有一个方法接收一个ValueTuple,修改后返回。在这种情况下,我可以在方法参数中指定 ValueTuple 的字段名吗? private static void Operation() {
如何像这样创建超过八个值的 ValueTuple 列表: (int Id, string FirstName, string LastName, int Vek, int City, int Zip,
这可以在 C# 7.3(框架 4.8)中正确编译: (string, string) s = ("a", "b"); (object, string) o = s; 我知道这是以下内容的语法糖,它也可
这个问题已经有答案了: Why can't class fields be var? [duplicate] (4 个回答) 已关闭 4 年前。 我想初始化 ValueTuples 的静态只读数组,我
我刚刚将一个 DLL 文件包含到我的项目中,并且正在使用一种返回 List 的方法。 .我最近才意识到 ValueTuple C# 7 中的数据类型,并希望使用它而不是返回的普通元组。我知道我可以循环
这个问题已经有答案了: Why can't class fields be var? [duplicate] (4 个回答) 已关闭 4 年前。 我想初始化 ValueTuples 的静态只读数组,我
我刚刚将一个 DLL 文件包含到我的项目中,并且正在使用一种返回 List 的方法。 .我最近才意识到 ValueTuple C# 7 中的数据类型,并希望使用它而不是返回的普通元组。我知道我可以循环
我是一名优秀的程序员,十分优秀!