相关疑难解决方法(0)

238
推荐指数
8
解决办法
9万
查看次数

动态vs对象类型

我可以互换地使用动态和对象类型.这两种类型有什么区别吗?使用一个比另一个有任何性能影响吗?哪一个更灵活?

c# types dynamic object

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

VB中的.NET 4.0框架动态功能与Option Strict On?

是否有任何方法可以在4.0框架中使用新的动态功能,如ExpandoObjectVB.NET中没有设置Option Strict Off?使用C#,只有使用您明确声明的变量才会丢失类型安全性dynamic.但是使用VB,我发现使用这些功能的唯一方法就是Option Strict Off从一开始就在VB.NET中使用的旧技巧.如果没有Option Strict,文件中的所有内容都会被模糊输入污染,如下所示:

Option Explicit On
Option Strict Off
Option Infer On

Partial Public Class ClassX

   Public Sub TestDynamic()
      Dim dyn As Object = New System.Dynamic.ExpandoObject()
      Dim a As String = 1 ''# Ew!
      Dim obj As Object = "999"

      dyn.Str = a   ''# a is a string, remember?  Even though it has a number
      ''# dyn.Str = 1 : Type = System.String
      Console.WriteLine("dyn.Str = …
Run Code Online (Sandbox Code Playgroud)

vb.net dynamic .net-4.0 expandoobject

16
推荐指数
1
解决办法
7349
查看次数

C#:派生类上具有不同返回类型的属性

我试图寻找这个问题的答案,但找不到太多,很可能是因为我不知道如何正确地寻找它,所以这就是它.非常感谢所有帮助.

使用看起来像的基类

abstract public class Property
{
    private String name;

    public Property(String propertyName)
    { 
        name = propertyName; 
    }

    public String Name
    {
        get { return name; }
    }

    abstract public override String ToString();
}
Run Code Online (Sandbox Code Playgroud)

和派生类看起来像

public class StringProperty : Property
{
    private String value; // different properties for different types

    public StringProperty(String propertyName, String value) : base(propertyName)
    {
        this.value = value;
    }

    public String Value // different signature for different properties
    {
        get { return value; }
    }

    public override …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism abstract-class overriding

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

动态方法调用VB而不反射

我想使用方法调用格式化任何数字类型,如下所示:

Option Infer On
Option Strict Off
Imports System.Runtime.CompilerServices

Namespace GPR
    Module GPRExtensions
        <Extension()>
        Public Function ToGPRFormattedString(value) As String
            ' Use VB's dynamic dispatch to assume that value is numeric
            Dim d As Double = CDbl(value)
            Dim s = d.ToString("N3")
            Dim dynamicValue = value.ToString("N3")
            Return dynamicValue
        End Function
    End Module
End Namespace
Run Code Online (Sandbox Code Playgroud)

现在,从围绕Web的各种讨论(VB.Net相当于C#'动态'与Option Strict On,动态关键字相当于VB.Net?),我认为这个代码在传递数字类型时会起作用(double,Decimal ,int等).它没有,正如您在屏幕截图中看到的:

显示动态方法调用失败的异常

我可以显式地将参数转换为double然后.ToString("N3")工作,但只是在所谓的动态value参数上调用它失败.

但是,我可以使用以下代码在C#中完成它(使用LINQPad).(注意,编译器不允许您dynamic在扩展方法中使用参数,因此这可能是问题的一部分.)

void Main()
{
    Console.WriteLine (1.ToGPRFormattedString());
}

internal static class GPRExtensions
{
    public …
Run Code Online (Sandbox Code Playgroud)

vb.net dynamic

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

使用泛型属性调用重载方法会调用错误的重载

我有一个基本的过滤器类,存储string参数名称和通用T值.过滤器有一个方法Write(writer As IWriter),可以将过滤器的内容写入HTML页面.该Write方法有两个重载,一个带两个字符串,它接受一个字符串和一个对象.这让我自动引用字符串.

问题是,当我调用writer.Write(ParameterName, Value)并且T是a时string,它调用字符串/对象的重载,而不是字符串/字符串!如果我writer直接调用Write方法,它会按预期工作.

这是C#中的SSCE.我在VB和C#中测试了这个,发现了同样的问题

void Main() {
    FooWriter writer = new FooWriter();

    Filter<string> f = new Filter<string>() {ParameterName = "param", Value = "value"};

    f.Write(writer);                        //Outputs wrote w/ object
    writer.Write(f.ParameterName, f.Value); //Outputs wrote w/ string
}

class FooWriter {
    public void Write(string name, object value) {
        Console.WriteLine("wrote w/ object");
    }

    public void Write(string name, string value) {
        Console.WriteLine("wrote w/ string");
    }
}

class …
Run Code Online (Sandbox Code Playgroud)

c# vb.net generics overloading

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

这个东西在.net中叫什么?

我记得有一段时间,我正在开发一个基于C#razor的网页.有一个响应属性,作为控制器和页面之间的一种管道.我不知道它叫什么,但它有一个有趣的属性 -

基本上它就像一个字典(字符串,对象),所以你可以通过任何名称转储任何名称,除非你像这样使用它:

ThingNameIDontRemember.name =无论如何

在添加了我想要的东西之后,我认为它们甚至出现在另一侧的intellisense自动完成中(与您对通用对象的期望不同)

这个类型叫什么,它是否也可以在mvc bundle之外使用?在我目前的vb.net项目中,我真的会使用类似的东西.

.net asp.net-mvc

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