相关疑难解决方法(0)

通用TryParse

我正在尝试创建一个通用扩展,使用'TryParse'来检查字符串是否是给定类型:

public static bool Is<T>(this string input)
{
    T notUsed;
    return T.TryParse(input, out notUsed);
}
Run Code Online (Sandbox Code Playgroud)

这将无法编译,因为它无法解析符号'TryParse'

据我了解,'TryParse'不是任何界面的一部分.

这有可能吗?

更新:

使用下面的答案,我想出了:

public static bool Is<T>(this string input)
{
    try
    {
        TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(input);
    }
    catch
    {
        return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

它运作得很好,但我认为以这种方式使用异常对我来说感觉不对.

UPDATE2:

修改为传递类型而不是使用泛型:

public static bool Is(this string input, Type targetType)
{
    try
    {
        TypeDescriptor.GetConverter(targetType).ConvertFromString(input);
        return true;
    }
    catch
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# generics tryparse

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

将对象映射到字典,反之亦然

是否有任何优雅的快速方法将对象映射到字典,反之亦然?

例:

IDictionary<string,object> a = new Dictionary<string,object>();
a["Id"]=1;
a["Name"]="Ahmad";
// .....
Run Code Online (Sandbox Code Playgroud)

SomeClass b = new SomeClass();
b.Id=1;
b.Name="Ahmad";
// ..........
Run Code Online (Sandbox Code Playgroud)

.net c# mapping dictionary idictionary

79
推荐指数
7
解决办法
9万
查看次数

.NET反射的"成本"是多少?

可能重复:
.NET反射的代价是多少?

我目前处于一种编程心态,反思是我最好的朋友.我使用它来动态加载内容,允许"松散实现"而不是严格的接口,以及许多自定义属性.

使用反射的"实际"成本是多少?

经常反映的类型是否值得缓存反射,例如我们自己的LINQ DAL目标代码在表定义的所有属性上?

缓存内存占用量是否会超过反射CPU的使用量?

.net c# reflection optimization

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

反思有多慢

我最近创建了一个接口层来区分DataAccessProvider和业务逻辑层.通过这种方法,我们可以随时通过更改Web/App.Config中的值来更改DataAccessProvider的选择.(如果需要,可以给出更多细节).

无论如何,要做到这一点,我们使用反射来完成我们可以工作的DataProvider类.

/// <summary>
/// The constructor will create a new provider with the use of reflection.
/// If the assembly could not be loaded an AssemblyNotFoundException will be thrown.
/// </summary>
public DataAccessProviderFactory()
{
    string providerName = ConfigurationManager.AppSettings["DataProvider"];
    string providerFactoryName = ConfigurationManager.AppSettings["DataProviderFactory"];
    try
    {
        activeProvider = Assembly.Load(providerName);
        activeDataProviderFactory = (IDataProviderFactory)activeProvider.CreateInstance(providerFactoryName);
    }
    catch
    {
        throw new AssemblyNotFoundException();
    }
}
Run Code Online (Sandbox Code Playgroud)

但现在我想知道反思有多缓慢?

c# reflection performance assemblies

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

如何将对象"克隆"到子类对象中?

我有一个类A和一个B继承类的类A,并用更多的字段扩展它.

拥有a类型的对象A,如何创建包含对象包含的所有数据b的类型的B对象a

我试过a.MemberwiseClone()但只给了我另一个类型的A对象.我不能A投入,B因为继承关系只允许相反的演员.

这样做的正确方法是什么?

c# copy subclass object

24
推荐指数
3
解决办法
9620
查看次数

反思真的很慢,我不应该在它有意义时使用它吗?

可能重复:
.NET反射的代价是多少?

我遇到的问题的"优雅"解决方案是使用属性将类及其属性与另一个类相关联.问题是,要将它转换为另一个,我必须使用反射.我正在考虑将其托管在云端的服务器端应用程序.

我听过很多关于"反射很慢,不使用它"的隆隆声,慢得多慢?它是如此占用CPU密集度,以至于它会大大增加我的CPU时间,以至于我真的要为我决定在云端架构底部使用反射付出代价吗?

.net c# vb.net oop reflection

18
推荐指数
3
解决办法
3215
查看次数

使用.NET/C中的委托加速Reflection API

这篇文章有评论if you need to call the method multiple times, use reflection once to find it, then assign it to a delegate, and then call the delegate..

  • 如何以及为何delegate更快地运作?谁能有一些例子吗?
  • 我可以打电话给你caching吗?如果是这样,除了使用委托的缓存方法之外还有其他方法吗?

添加

我想出了一个delegate 在这里使用的例子.

.net c# reflection delegates

7
推荐指数
1
解决办法
3392
查看次数

反射API(如GetType()和GetTypes())的性能如何?

我在.NET/C#中使用反射API,如GetType()和GetTypes().

  • 在性能方面,这些API有多好或多坏?我的意思是,这些API是否需要花费很多时间才能导致性能下降,或者这些API是否设计得很好,可以忽略性能问题?
  • 通常人们在使用反射API时会缓存结果吗?

.net c# reflection caching

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

System.Reflection vs Generics - 性能

我即将在服务器应用程序上编写一组方法,这些方法接收从TCP套接字接收的消息,对它们进行编码/解码,并加密/解密它们.

考虑消息被定义为特殊类型,每个都有自己的属性和总长度,我需要选择以下解决方案之一:1.制作使用泛型的方法,例如Encode<T>(...) where T : IMessage然后为每种类型的实现编码器/解码器消息,并有ResolveEncoder<T>将挑选编码器被通缉的消息或2.使用任何类型的消息的制作方法,只要它实现IMessage,比如Encode(IMessage message),用的System.Reflection决定一切,我需要了解它.

我对解决方案#2更感兴趣,因为它使我的代码缩小了30倍.但是,我担心不断反映属性是否会影响性能.现在由于时间限制完成项目,我无法真正"实验".

我将非常感谢任何个人经验或与基准测试相关的性能与任何一种解决方案的关系.

c# generics reflection

6
推荐指数
2
解决办法
1725
查看次数

在.Net效果中使用反射效果相当差吗?

可能重复:
反射的代价是多少?

为了使我的代码具有通用性,我已经开始使用Reflection - 在DTO对象中获得一些优势并设置它们 -

与硬编码的setter相比,使用反射获取属性并设置它们会如此严重地影响性能?

.net c# reflection performance

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