相关疑难解决方法(0)

.NET中的"开放通用类型"究竟是什么?

我正在通过Asp.Net MVC课程并了解到,对于一种方法来确定控制器的动作,

  • 它必须没有"开放的通用类型"

我对某些泛型有所了解并在某种程度上使用它们,但是:

  • 什么是.Net中的开放泛型类型.
  • 是否存在封闭的泛型类型
  • 开放泛型类型是一个不经常使用的术语.与它混淆使用的是什么?

.net c# generics open-generics

114
推荐指数
4
解决办法
3万
查看次数

typeof generic和casted类型

假设我们有通用方法:

public void GenericMethod<T>(T item)
{
    var typeOf = typeof(T);
    var getType = item.GetType();
}
Run Code Online (Sandbox Code Playgroud)

我们使用以下参数调用它:

GenericMethod(1)
GenericMethod((object) 1)
Run Code Online (Sandbox Code Playgroud)

结果是:

typeOf = System.Int32
getType = System.Int32
Run Code Online (Sandbox Code Playgroud)

typeOf = System.Object
getType = System.Int32
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么输入到对象的typeof整数返回System.Object,但.GetType()返回System.Int32?

c# generics

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

其中t:类泛型约束和const值声明

根据C#规范10.4 Constants:

常量声明中指定的类型必须是 sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,decimal,bool,string,enum-type 或reference-type.每个常量表达式必须生成目标类型或可通过隐式转换(第6.1节)转换为目标类型的类型的值.

为什么我不能做以下事情:

public class GenericClass<T>
    where T : class
{
    public const T val = null;
}
Run Code Online (Sandbox Code Playgroud)

这应该是可能的,因为:

  • where T : class意思是,The type argument must be a reference type; this applies also to any class, interface, delegate, or array type(来自MSDN)
  • 它满足规范中的另一个单词:除了stringis 之外的引用类型常量的唯一可能值null.

任何可能的解释?

c# generics const

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

为什么这个泛型在编译时没有得到解决?

我有以下代码.我希望它打印:

A
B
C
DONE
Run Code Online (Sandbox Code Playgroud)

相反它打印

P
P
P
DONE
Run Code Online (Sandbox Code Playgroud)

为什么?

更新
我不是要求解决方案.我想知道为什么会这样.我认为泛型在编译时得到了解决.从我可以告诉它应该能够在编译时将这些解析为正确的方法,但显然它不是,我不明白为什么.我正在寻找解释原因的解释,而不是解决方案.

这是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication50
{
    class Parent
    {
        public string FieldName { get; set; }
        public string Id { get; set; }
    }

    class ChildA : Parent
    {
        public string FieldValue { get; set; }
    }

    class ChildB : Parent
    {
        public DateTime? Start { get; set; }
        public DateTime? End { get; set; }
    }

    class ChildC : Parent …
Run Code Online (Sandbox Code Playgroud)

c# generics

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

将Generic Type传递给方法

这可能吗?

当一个类型被传入一个方法时,我想实例化泛型类myClass

public class myClass<T>
{

}

public void PassInType(Type myType)
{

myClass<myType> c=new myClass<myType>();
}
Run Code Online (Sandbox Code Playgroud)

更新:

好吧,因为那是不可能的,我该怎么做

public myMethod(string myType)
{

myClass<myType> c=new myClass<myType>();

}
Run Code Online (Sandbox Code Playgroud)

c# generics

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

为什么我的通用<T>没有得到解决?

我有一堂课电影:

internal class Movie
    {
        public string Name { get; set; }
        public string Year { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

我有这个代码:

 var Movies = CreateMovies(); //IEnumerable<Movie>
 var sorter = new Sorter<Movie>();
 sorter.AddSort(Movies,  m => m.Year , a=>a.Name ,.....as many as I want....);
Run Code Online (Sandbox Code Playgroud)

这是Sorter班级:

 class Sorter<T>
{
    public void AddSort(IEnumerable<T> movs,  params Expression<Func<T, object>>[]    funcs)
    {
                 /*...*/ 
        movs.OrderBy(d=>d.); //<----- here is the problem : where is the columns ?
    }
}
Run Code Online (Sandbox Code Playgroud)

题 :

当我需要智慧时d,它告诉我:

在此输入图像描述

我不明白为什么T不推断为 …

c# generics

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

标签 统计

c# ×6

generics ×6

.net ×1

const ×1

open-generics ×1