问答

c# – 当它作为一个对象提供时,如何循环HashSet而T可以是任何东西?

 来源    2019-07-29    1  

我正在使用Value Injecters使用LoopValueInjection从1种类型映射到另一种类型,并使用一些自定义逻辑覆盖SetValue(对象v)方法.我试图检测何时传入HashSet并通过HashSet并将方法应用于其中的每个项目以进行一些清理.我遇到的问题是因为参数只是一个对象,我不知道HashSet中的项目类型.例如,它可以是HashSet或HashSet.

这是我目前的代码,但我得到一个InvalidCastException.

    protected override object SetValue(object v)
    {
        if (type.Name == "HashSet`1")
        {
            var genericType = type.GetGenericArguments()[0];

            // this line throws the InvalidCastException
            var cleanHashSet = (HashSet<object>)Activator.CreateInstance(type);

            foreach (var item in (HashSet<object>)v)  // I'm sure this cast will throw as well
            {
                cleanHashSet.Add(Clean(item));
            }

            return cleanHashSet;
        }

        return base.SetValue(v);
    }

我想主要的问题是,一旦我确定它实际上是某种HashSet,我如何循环通过作为对象传入的HashSet?我也在想我将需要创建一个特定类型的新空HashSet,这样我就可以将每个被清理的项目放入其中.

在.NET中,只有接口和委托类型可以是共同变体和反变体.因此无法投射HashSet到HashSet.

您希望将v转换为IEnumerable接口的非泛型版本

dynamic cleanHashSet = Activator.CreateInstance(type);
foreach (object item in (IEnumerable)v)
{
    cleanHashSet.Add(Clean(item));
}

如果您不想使用动态关键字,则需要使用反射调用Add方法

object cleanHashSet = Activator.CreateInstance(type);
var method = type.GetMethod("Add");
foreach (object item in (IEnumerable)v)
{
    method.Invoke(cleanHashSet, new object[] { Clean(item) });
}
reactjs – React:当state是一个对象数组时更新状态
问答我有一个状态的对象数组: this.state = { items: [ {id: 1, someattr: "a string", anotherattr: "&quo ...
当页面作为HTML 4.01提供时,是否需要“xmlns”?
问答我喜欢以HTML 4.01的形式提供页面,因为XHTML在某些浏览器中并不是真的被视为XHTML,但Facebook's OpenGraph meta tags要求: <html xmlns=& ...
1
python – 为什么会话cookie在从域提供时起作用而在使用IP时不起作用?
问答我有一个Flask应用程序,其会话在我的本地开发机器上运行良好.但是,当我尝试在Amazon服务器上部署它时,会话似乎不起作用. 更具体地说,未设置会话cookie.但是,我可以设置正常的cookie ...
1
oauth-2.0 – 当需要电子邮件属性但Facebook不提供时,用户如何通过Facebook注册Cognio用户池?
问答我的AWS Cognito Pool将电子邮件作为必需属性.注册到我的应用的所有用户都必须提供他们的电子邮件. 我最近将Facebook作为身份提供商添加到我的用户池中. 问题是Facebook并不总 ...
1
c – 派生类是否需要在基类提供时实现移动语义?
问答我读完了Thomas Becker's "C++ Rvalue References".我有几个关于Rvalues和Rvalue引用的问题. 假设我有一个简单的数组类: templ ...
1
可可 – 当视图由NSViewController提供时,如何使用基于视图的NSTableView的autolayout?
问答我已经做了以下示例应用程序来说明我的问题. >左视图是一个占位符视图(在Interface Builder中添加).当应用程序加载时,我添加由NSViewController管理的子视图. NS ...
2
c – 为什么Vector在列表提供时不提供remove()成员函数?
问答如果我想用vector中的值删除所有元素,我调用remove算法,然后调用vector的erase成员函数来物理删除它.      但是在list的情况下,简单的调用删除成员函数,它将删除具有该值的所 ...
1
c – 为什么在被另一个对象替换时不调用数组中对象的析构函数?
问答只看代码 class SomeClass { private: int i; public: int getI() { return i; } SomeClass() { i = 0; } expli ...
2
当字母作为字符串提供时,如何在R图中显示希腊字母
问答我想在R plot中显示希腊字母,其中字母是数据框名称.例如,假设我有 dataframe <- read.table("input.dat"); cnames <- ...
1
java – 将接口作为arraylist类型提供时编译错误
问答我有一个定义为的接口 interface ListItem { public String toString(); public String getUUID(); } 以及实现该接口的类(Brows ...
1
java – 在创建一个对象数组时,当我改变一个对象的属性时,它们都会改变
问答所以我有一个名为Hero的课程: public class Hero { public static int x; public static int y; Hero() { x=0; y=0; } ...
python – 当连接字符串中没有提供时,pyodbc从哪里获取用户和pwd
问答我继承了一个项目,并且在尝试与数据库交互时遇到了一个似乎是权限的问题.基本上我们有两个分离过程然后删除. 如果连接字符串只有驱动程序,服务器和数据库名称,是否有人知道用户来自何处. 编辑 我使用的是W ...
在Go模板范围循环中,是在每次迭代时在循环重置之外声明的变量吗?
问答我正在尝试使用在Go模板范围循环外声明的变量来查看上一篇文章是否与当前帖子发生在同一天.这是一个简化的例子. 其中.Posts是一个post结构数组,每个结构都有一个.Content和一个.Date. ...
1
C – 为什么在使用uint64_t计数器时for循环会卡住,而while循环不是?
问答当我使用带有uint64_t的for循环作为计数器时,它会永远被卡住,即使条件似乎已经很好地定义了. 攻击MCVE #include <stdio.h> #include <intt ...
1
c# – 循环比for循环要快得多,然后当语句改变时,while循环更快.怎么了?
问答出于兴趣,我测试了for循环和while循环是否存在任何差异.是什么原因导致while循环在我的计算机(AMD Phenom II X6 1090T @ 3.20GHz)上比for循环长约2-2.5秒 ...
在Nginx服务器上强制SSL时重定向循环
问答最近我一直在尝试使用Nginx重定向到HTTPS,但是在我尝试在浏览器中访问我的网站后,我一直在获得重定向循环.这是我的完整服务器块配置文件: server { listen 80 default_s ...
1
haskell – 为什么这段代码使用UndecidableInstances编译,然后生成一个运行时无限循环?
问答当使用UndecidableInstances编写一些代码时,我碰到了一些我发现很奇怪的东西.我设法无意中创建一些类型检查的代码,当我相信它不应该: {-# LANGUAGE FlexibleInst ...
1
仿真 – 模拟CPU时的循环计数精度问题
问答我打算在接下来的几个月里创建一个Sega Master System模拟器,作为Java中的一个爱好项目(我知道它不是最好的语言,但我发现它很舒服,并且作为一个频繁的用户Windows和Linux我认 ...
1
循环 – 从字符设备读取时不断循环
问答对于作业作业,我写了一个字符设备驱动程序.似乎工作正常我可以读写它.问题是当我读取设备时,它会无休止地循环,反复打印消息缓冲区的内容. 这似乎应该是相当直截了当的.只需使用copy_to_user() ...
1