小编Mat*_*ell的帖子

如何以强类型方式动态获取特定方法的名称?

我有点不确定如何将标题写入这个问题,但我正在寻找VB.NET中的最短/最终方式(或C#,但目前使用VB.NET)来获取方法的字符串值在方法调用时动态命名.

例如,我有一个这样的类:

Public Class Blah
    Public Sub Foo()
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

现在,Foo是动态设置的强类型封面,我有一个事件处理程序,当设置更改时将触发该事件处理程序,并返回更改的设置的字符串名称.

我希望能够在这个字符串上切换/选择一个基于Foo()方法的案例.为此,我需要能够从方法调用本身获取Foo方法的字符串名称(即以某种方式GetMethodName(blahInstance.Foo())).

c# vb.net reflection

3
推荐指数
1
解决办法
598
查看次数

如何仅在ASP.NET动态数据的列表页面上隐藏列?

这有点类似于这个问题.

但是,我不想一直隐藏列,而只是想隐藏List.aspx页面上的列.

我的具体示例是,长(或至少nvarchar(MAX))字段会自动从List.aspx页面隐藏,但在Edit.aspx页面上仍然可见.

我想为其他(较短)列复制此行为.

这可能吗?

asp.net dynamic-data

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

在IIS6上将所有请求重定向到ASP.NET MVC

我可能忽略了一些非常简单的东西,但我试图将所有错误的URL重定向到根据条件过滤URL的操作,然后301重定向到合适的页面或发出404页面.

为此,我在路由表的末尾有这样的路由:

routes.MapRoute("Error", "{*url}", new { controller = "Main", action = "Error" }); 
Run Code Online (Sandbox Code Playgroud)

这样的动作:

public ActionResult Error(string url)
{
        if (/* Conditions are met... */)
        {
            Response.Status = "301 Moved Permanently";
            Response.AddHeader("Location", /* Destination URL */);
            Response.End();
        }

        Response.StatusCode = 404;
        return View(/* 404 page... */));
}
Run Code Online (Sandbox Code Playgroud)

这在当地非常有效.

但是,当部署到IIS6时,不包含.mvc(例如oldfile.php)的URL永远不会发送到ASP.NET进程进行路由.

有一个简单的解决方案/我忽略了什么吗?

编辑:这与此问题有关,但在IIS6下,没有.mvc的URL不会被发送用于ASP.NET MVC处理.

asp.net-mvc redirect iis-6 http-status-code-404

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

如何编写一个Java函数,它返回一个类型为'this'的实例,并在扩展时起作用?

这是一个懒惰的问题,但你得到了代表:-)

我有一个Java类,它返回自身的实例以允许链接(例如ClassObject.doStuff().doStuff())

例如:

public class Chainer
{
    public Chainer doStuff()
    {
       /* Do stuff ... */
       return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想扩展这个课程.有没有办法,也许使用泛型,扩展这个类而不必覆盖每个方法签名?

不是:

public class ChainerExtender extends Chainer
{
    public ChainerExtender doStuff()
    {
       super.doStuff();
       return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过了:

public class Chainer
{
    public <A extends Chainer> A doStuff()
    {
       /* Do stuff ... */
       return (A)this;
    }
}

public class ChainerExtender extends Chainer
{
    public <A extends Chainer> A doStuff()
    {
       /* Do stuff ... */
       return super.doStuff();
    }
} …
Run Code Online (Sandbox Code Playgroud)

java generics

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

通过反射获取事件参数

我无法弄清楚如何获取事件的参数类型.

例如,我只能看到使用MethodInfo来获取参数,但我有一个EventInfo或FieldInfo.

我想要的是能够从这里得到'布尔':

Public Event EventName(ByVal sender As Object, ByVal value As Boolean)
Run Code Online (Sandbox Code Playgroud)

我理论上可以尝试类似GetRaiseMethod()的东西,但这不起作用(因为该方法根据此链接返回null ),即使它确实需要首先进行方法绑定,这意味着只需要确认测试套件事件在初始化时具有某个类型参数.

有任何想法吗?

c# vb.net reflection

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

你如何告诉C#编译器,当它们共享同一个名称时,它是一个类型而不是一个变量?

当你有一个名为与类型相同的局部变量时,有没有办法告诉编译器你给出的符号是一个类型还是一个变量?例如考虑(并忽略所有类型的返回错误):

public class sometype { public static sometype DoSomething() {} }

public string sometype { get { return sometype.DoSomething(); } } //A
public string sometype { get { return sometype.Trim(); } } //B
public sometype sometype { get { return sometype.DoSomething(); } } //C
public sometype sometype { get { return sometype.Trim(); } } //D
Run Code Online (Sandbox Code Playgroud)
  • A - >错误(没有方法DoSomething())
  • B - >作品
  • C - >作品
  • D - >错误(没有方法修剪())

从更具适用性的角度来看

(如果XSD让你烦恼,你可能想跳过这个):

我目前正在努力让LINQ到XSD工作.在我的XSD文件中有xs:这样的元素:

<xs:element name="car" type="car">
Run Code Online (Sandbox Code Playgroud)

'car'类型被定义为这样的simpleType
(可能还有一些限制,但这本质上是它):

<xs:simpleType name="car">
 <xs:restriction base="xs:string" /> …
Run Code Online (Sandbox Code Playgroud)

.net c# linq-to-xsd

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

以编程方式在Excel中关闭工作簿

假设我有一个名为"DataSheet.xls"的Excel文件打开.如何使用c#杀死该Excel文件?

c# excel-2007

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

"强制转换"返回类型

这应该是一个非常微不足道的.

C#可以返回"强制转换"类型,即以下失败的类型:

 private ICollection<string> _strings = new List<string>();
 public IEnumerable<string> Strings
 {
     get
     {
          return ((IEnumerable<string>)_strings);
     }
 }

 /* I should not know that Strings can be cast to ICollection */
 public void AddToStrings()
 {
     ICollection<string> st = ((ICollection<string>)Strings); /* I should fail */
     st.Add("MyString");
 }
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

 public IEnumerable<string> Strings
 {
     get
     {
          return ((IEnumerable<string>)_strings.ToArray());
     }
 }
Run Code Online (Sandbox Code Playgroud)

但这似乎是(1)不必要的,(2)仍然不会阻止他们投入ICollection,只是添加和(3)我只是对一般问题感到好奇.

澄清

有些人似乎不确定我想在这里实现什么.我试图阻止外部课程违反我提供的合同.我没有说过Strings是一个ICollection - 它恰好发生在我内部使用它 - 因此没有外部类应该能够将我返回的变量视为ICollection.我不想向它们公开修改行为,我不希望它们将我的变量视为ICollection,以防我以后改变生成IEnumerable的方式.

更一般地说,我可以将对象作为其特定类型之一的实例返回,并防止以后转换为其更常规类型之一.例如,虽然你可以产生一个新的IEnumerable,你可以返回一个IDisposable对象,它不能被转换回它的任何类型(即只有Dispose()和对象方法可调用)?

c# types

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

如何判断页面是否由JSP生成?

由于有许多编程语言可用于开发Web应用程序.在不查看源代码的情况下,有哪些方法可以确定Web应用程序是用Java编写的?

java jsp

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

为什么编译器在传递继承类型时会给出模糊的调用错误?

C#编译器中发生了什么导致以下模糊调用编译错误?

同样的问题适用于扩展方法,或者何时TestClass是通用的并且使用实例而不是静态方法.

我意识到它很容易解决(例如secondInstance转换Test1为方法调用)但我更好奇编译器为方法选择应用了什么逻辑.

我的假设是编译器在方法检测上应用某种程度的特异性度量(如CSS)以确定最具体的匹配 - 这是无效的吗?

class Type1 { }
class Type2 : Type1 {}

class TestClass
{
    public static void Do<T>(T something, object o) where T : Type1
    {} 

    public static void Do(Type1 something, string o)
    {}
}

void Main()
{
    var firstInstance = new Type1();
    TestClass.Do(firstInstance, new object()); // Calls Do<T>(T, obj)
    TestClass.Do(firstInstance, "Test"); // Calls Do(Type1, string)

    var secondInstance = new Type2();
    TestClass.Do(secondInstance, new object()); // Calls Do<T>(T, obj)
    TestClass.Do(secondInstance, "Test"); …
Run Code Online (Sandbox Code Playgroud)

c#

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