小编Abr*_*mJP的帖子

动态朗.运行时与反射

我打算为我的新项目使用动态关键字.但在介入之前,我想了解使用动态关键字而不是反射的优缺点.

在专业人士的位置,我可以找到关于动态关键字:

  • 可读\可维护代码.
  • 更少的代码行.

虽然与使用动态关键字相关的负面因素,我听到的是:

  • 影响应用程序性能.
  • Dynamic关键字在内部是Reflection的包装器.
  • 动态类型可能会成为难以找到错误的滋生地.
  • 影响与以前的.NET版本的互操作性.

请帮助我看看我遇到的利弊是否合情合理?

c# reflection dynamic-language-runtime dynamic

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

DebugBreak()在C#中等效

在C#中有任何语句等同于DebugBreak().我希望在满足特定条件时调用调试器.

请帮忙

.net c# debugging

28
推荐指数
3
解决办法
9686
查看次数

使用Reflection调用包含通用参数的静态方法

执行以下代码时,我收到此错误"无法对ContainsGenericParameters为true的类型或方法执行后期绑定操作."

class Program
{
    static void Main(string[] args)
    {
        MethodInfo MI = typeof(MyClass).GetMethod("TestProc");
        MI.MakeGenericMethod(new [] {typeof(string)});
        MI.Invoke(null, new [] {"Hello"});
    }
}

class MyClass
{
    public static void TestProc<T>(T prefix) 
    {
        Console.WriteLine("Hello");
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码只是我面临的实际问题的缩放版本.请帮忙.

c# generics reflection

14
推荐指数
1
解决办法
1万
查看次数

使用反射将项添加到List <T>

我试图通过反射向IList添加项目,但在调用"添加"方法时,抛出错误"对象引用未设置".在调试时我发现GetMethod("Add")返回了一个NULL引用.

Type objTyp = typeof(MyObject); //HardCoded TypeName for demo purpose
var IListRef = typeof (List<>);
Type[] IListParam = {objTyp};          
object Result = IListRef.MakeGenericType(IListParam);

MyObject objTemp = new MyObject(); 
Result.GetType().GetMethod("Add").Invoke(Result, new[] {objTemp });
Run Code Online (Sandbox Code Playgroud)

请帮忙.

c# reflection

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

主键是否应始终指定为聚簇索引

我有一个存储员工详细信息的SQLServer表,列ID是GUID类型,而EmployeeNumber列是INT类型.大多数时候,我会在加入和选择条件时处理EmployeeNumber.

我的问题是,在ClusteredIndex为EmployeeNumber时,将PrimaryKey分配给ID列是否合理?

sql sql-server clustered-index

10
推荐指数
2
解决办法
7943
查看次数

为什么字符串的行为类似于ValueType

在执行这段代码之后我感到困惑,其中字符串似乎表现得好像它们是值类型.我想知道赋值运算符是否运行像字符串的相等运算符之类的值.

这是我为测试此行为而执行的一段代码.

using System;

namespace RefTypeDelimma
{
    class Program
    {
        static void Main(string[] args)
        {
            string a1, a2;

            a1 = "ABC";
            a2 = a1; //This should assign a1 reference to a2
            a2 = "XYZ";  //I expect this should change the a1 value to "XYZ"

            Console.WriteLine("a1:" + a1 + ", a2:" + a2);//Outputs a1:ABC, a2:XYZ
            //Expected: a1:XYZ, a2:XYZ (as string being a ref type)

            Proc(a2); //Altering values of ref types inside a procedure 
                      //should reflect in the variable thats being passed …
Run Code Online (Sandbox Code Playgroud)

c# string

8
推荐指数
4
解决办法
1503
查看次数

基于类型信息的动态投射

我想使用从一个数组到另一个数组的类型信息进行显式转换,这通过继承相关.我的问题是,在使用Type信息进行转换时,编译器会抛出错误,但我的要求是根据提供的Type信息动态转换.

请帮忙

class Program
{
    static void Main(string[] args)
    {
        Parent[] objParent;
        Child[] objChild = new Child[] { new Child(), new Child() };
        Type TypParent = typeof(Parent);

        //Works when i mention the class name
        objParent = (Parent[])objChild;

        //Doesn't work if I mention Type info 
        objParent = (TypParent[])objChild;
    }
}

class Parent
{
}

class Child : Parent
{
}
Run Code Online (Sandbox Code Playgroud)

c# casting

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

将DataSet\DataTable转换为CSV

如果有办法从DataTable或DataSet生成CSV文件,请告诉我?具体而言,无需手动迭代DataTable行和连接.

请帮忙

.net c# ado.net

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

Windows休眠如何工作

出于好奇,我正在寻找关于"windows hibernate选项如何工作"的文章/文档,即当在Windows关闭对话框中选择"Hibernate"选项时.我从一些消息来源得到的答复是,它仅仅是内存和寄存器的序列化.

请原谅我,如果我错在这里.如果windows可以序列化任何应用程序,进程或对象,无论其是可序列化的还是非可序列化的,那么.NET如何将可序列化对象限制为具有[Serializable]属性或ISerializable接口的对象?

.net windows

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

通过反射分配委托方法

在通过反射动态地将方法分配给委托实例时,我陷入困境.以下是我所面临的情况的示例情景.

class Program
{
    static void Main(string[] args)
    {
        new DynamicDelegateTest().Test();            
    }
}

public class DynamicDelegateTest
{
    public void Test()
    {
        //This is what i target to do through reflection
        ABC objABC1 = new ABC();
        objABC1.Proc = Debugger;
        objABC1.Test("Helloz");

        //Implementing the same code through reflection
        ABC objABC = new ABC();
        MethodInfo MIDebugger = GetType().GetMethod("Debugger", BindingFlags.NonPublic | BindingFlags.Instance);
        FieldInfo MyProc = objABC.GetType().GetField("Proc", BindingFlags.Public | BindingFlags.Instance);

        //This is the point where I got stuck up
        MyProc.SetValue(objABC, MIDebugger);
        objABC.Test("QWERTY");  
    }

    void Debugger(object Tests) …
Run Code Online (Sandbox Code Playgroud)

c# reflection

4
推荐指数
1
解决办法
5046
查看次数