相关疑难解决方法(0)

如何确定类型是否实现特定的通用接口类型

假设以下类型定义:

public interface IFoo<T> : IBar<T> {}
public class Foo<T> : IFoo<T> {}
Run Code Online (Sandbox Code Playgroud)

当只有受损的类型可用时,如何确定类型是否Foo实现了通用接口IBar<T>

.net c# reflection

211
推荐指数
7
解决办法
8万
查看次数

如何检查一个类是否继承了另一个类而没有实例化它?

假设我有一个看起来像这样的类:

class Derived : // some inheritance stuff here
{
}
Run Code Online (Sandbox Code Playgroud)

我想在我的代码中检查这样的内容:

Derived is SomeType;
Run Code Online (Sandbox Code Playgroud)

但看起来像is运算符需要Derived是Dervied类型的变量,而不是Derived本身.我不想创建Derived类型的对象.
如何在SomeType不实例化的情况下确保Derived继承?

PS如果它有帮助,我想要一些where关键字与泛型有关的东西.
编辑:
类似于这个答案,但它正在检查一个对象.我想查看课程本身.

c# inheritance types

130
推荐指数
2
解决办法
9万
查看次数

如何首先使用迁移向Entity Framework 4.3代码中的列添加描述?

我首先使用Entity Framework 4.3.1代码进行显式迁移.如何在实体配置类或迁移中添加列的描述,以便最终作为SQL Server中列的描述(例如2008 R2)?

我知道我可以编写一个DbMigration类的扩展方法,该方法将迁移事务中的sql迁移操作注册sp_updateextendedpropertysp_addextendedproperty过程调用,并在迁移Up方法中创建表后调用该扩展.但是,我还没有发现一种优雅的内置方式吗?拥有迁移的更改检测逻辑可以获取的属性并在scaffolded迁移中生成appropritate方法调用会很好.

.net c# sql-server-2008-r2 entity-framework-4.3

22
推荐指数
3
解决办法
9008
查看次数

是否存在"where not derived from"的泛型类型约束?

我们可以在泛型类型参数上指定"派生自"约束,如下所示:

class Bar<T> where T : IFooGenerator
Run Code Online (Sandbox Code Playgroud)

有没有办法指定NOT派生自?


我的用例:我有一堆FooGenerator可并行化的s,每个都有相同的并行化代码,但我们不希望它们总是被并行化.

public class FooGenerator : IFooGenerator
{
    public Foo GenerateFoo() { ... }
}
Run Code Online (Sandbox Code Playgroud)

因此,我创建了一个用于并行生成Foo的通用容器类:

public class ParallelFooGenerator<T> : IFooGenerator where T : IFooGenerator
{
    public Foo GenerateFoo()
    {
        //Call T.GenerateFoo() a bunch in parallel
    }
}
Run Code Online (Sandbox Code Playgroud)

因为我想要FooGeneratorParallelFooGenerator<FooGenerator>可以互换,我做ParallelFooGenerator : IFooGenerator.但是,我显然不想ParallelFooGenerator<ParallelFooGenerator>合法.

因此,作为一个辅助问题,如果"不是从"约束条件不可能的话,是否有更好的方法来设计它?

c# generics

16
推荐指数
3
解决办法
2717
查看次数

如何在不知道封闭泛型类型的情况下访问通用属性

我有一个通用类型如下

public class TestGeneric<T>
{
    public T Data { get; set; }
    public TestGeneric(T data)
    {
        this.Data = data;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我现在有一个对象(来自某个外部源)我知道它的类型是一些封闭的TestGeneric <>,但我不知道TypeParameter T.现在我需要访问我的对象的数据.问题是我无法强制转换对象,因为我不确切知道哪个封闭的TestGeneric.

我用

// thx to http://stackoverflow.com/questions/457676/c-reflection-check-if-a-class-is-derived-from-a-generic-class
private static bool IsSubclassOfRawGeneric(Type rawGeneric, Type subclass)
{
    while (subclass != typeof(object))
    {
        var cur = subclass.IsGenericType ? subclass.GetGenericTypeDefinition() : subclass;
        if (rawGeneric == cur)
        {
            return true;
        }
        subclass = subclass.BaseType;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

为了确保,我的对象是泛型类型.有问题的代码如下:

public static void Main()
{
    object myObject = new TestGeneric<string>("test"); // or from another …
Run Code Online (Sandbox Code Playgroud)

c# generics reflection casting

13
推荐指数
2
解决办法
2万
查看次数

使用Json.NET的流畅转换器/映射器?

所以,我得到了一些我需要序列化/反序列化的类,这些类也恰好是域对象(至少是一些'em),因此我希望它们没有任何属性或者不依赖于某个框架.

我在Json.NET中查看了Custom Converters,但是在使用方面它们看起来非常" 古老 ",而不是,因为我们现在有了泛型,并且实现流畅的界面并不难.所以在我走弱路线之前等等.

...我正在寻找什么(伪):

public class MyModel {
    public int Id { get; set; }
    public string Name { get; set; }
    public SomeObj SomeObj { get; set; }
}

public class MyModelConverter : JsonConverter<MyModel> {

    public JsonConverter() {
        RuleFor(x => x.Id).Name("Identifier");
        RuleFor(x => x.SomeObj).Name("Data")
            .WithConverter(new SomeObjConverter());
        RuleFor(x => x.Name).Ignore();
    }

}
Run Code Online (Sandbox Code Playgroud)

在Json.NET中有类似的东西吗?我只是错过了一些东西吗?(顺便说一句,我不能为我的属性等使用不同的名称,因为模型基于第三方规范).

c# serialization json fluent json.net

12
推荐指数
1
解决办法
2139
查看次数

在C#中检查对象是否是非特定泛型类型

说我有以下课程:

public class General<T> { }
Run Code Online (Sandbox Code Playgroud)

我想知道一个对象是否属于那种类型.我知道我可以使用反射来找出该对象是否属于该泛型类型Type.GetGenericTypeDefinition,但我想避免这种情况.

是否有可能做某事obj is General<T>,或obj.GetType().IsAssignableFrom(typeof(General<T>))

我很惊讶我找不到类似的问题,尽管我在搜索中可能使用了错误的关键字.

.net c# generics types

11
推荐指数
1
解决办法
4573
查看次数

如何使用反射从泛型返回所有​​类子类,而不提供特定的泛型类型

我正在尝试使用反射编写一个方法来返回所有类,这些类是使用泛型的类的子类,而不受泛型类型的限制.例如,在EF中我想找到所有的映射类.这些类的设置如下:

public class clientMap : EntityTypeConfiguration<Client> {}
Run Code Online (Sandbox Code Playgroud)

我想在我的程序集中找到所有类的子类EntityTypeConfiguration<T>,而没有特别指定Client为T.我想在我的应用程序中为所有类返回实体类型配置,而不对其进行硬编码.

如果没有泛型,我会循环遍历程序集中的类型,检查是否type.IsSubclassOf(typeof(BaseClass)),但是我不知道在处理泛型时如何执行此操作.

c# generics reflection

6
推荐指数
1
解决办法
1402
查看次数

如何反序列化为 IREADONLY 字典 C#

我正在尝试反序列化 json

{
  "Type": "Correction",
  "StartTime": "2007-12-19T03:00:00.0000000-08:00",
  "EndTime": "2007-12-23T23:00:00.0000000-08:00",
  "Parameters": [
    {
      "Key": "Something",
      "Value": "1.8"
    },
    {
      "Key": "Something2",
      "Value": "0.10000000000000001"
    },
    {
      "Key": "Something3",
      "Value": "answer3"
    },
  ],
}
Run Code Online (Sandbox Code Playgroud)

进入一个 Dto 包括public IReadOnlyDictionary<string, string> Parameters { get; set; } 许多其他的东西。

我正在使用最新的 newtonsoft 解串器,其功能是

var responseObject = JsonConvert.DeserializeObject<TResponse>(jsonResponse);
Run Code Online (Sandbox Code Playgroud)

但它返回错误

Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'System.Collections.Generic.IReadOnlyDictionary`2[System.String,System.String]' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
Run Code Online (Sandbox Code Playgroud)

是否有任何工具可以帮助我将 Json 响应更改为不同的响应,例如

"Parameters": …
Run Code Online (Sandbox Code Playgroud)

c# json json-deserialization

6
推荐指数
1
解决办法
1653
查看次数

如何指定只能从同一程序集的派生类访问的方法?

在C#中是否有任何方法可以指定只能从同一程序集的派生类internal访问而不使用访问修饰符的方法?

谢谢.

.net c#

5
推荐指数
1
解决办法
1860
查看次数