小编pho*_*oog的帖子

如何使用反射来确定数组的嵌套类型(元素类型)?

我有一个System.Type实例,其中"IsArray"返回true.

如何确定数组类型的"嵌套类型"?

Type GetArrayType(Type t)
{
    if(t.IsArray)
    {
        //  What to put here?
    }
    throw new Exception("Type is not an array");
}
Assert.That(GetArrayType(typeof(string[])), Iz.EqualTo(typeof(string));
Assert.That(GetArrayType(typeof(Foo[])), Iz.EqualTo(typeof(Foo));
Run Code Online (Sandbox Code Playgroud)

.net c# reflection

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

如何通过Lambda或LINQ从列表中获取不同的实例

我有一个这样的课:

class MyClass<T> {
    public string value1 { get; set; }
    public T objT { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以及这个班级的清单.我想使用.net 3.5 lambda或linq来获取不同value1的MyClass列表.我想这可能比在.net 2.0中缓存这样的列表的方式简单得多:

List<MyClass<T>> list; 
...
List<MyClass<T>> listDistinct = new List<MyClass<T>>();
foreach (MyClass<T> instance in list)
{
    // some code to check if listDistinct does contain obj with intance.Value1
    // then listDistinct.Add(instance);
}
Run Code Online (Sandbox Code Playgroud)

lambda或LINQ的做法是什么?

c# linq lambda .net-3.5

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

使用反射创建表达式<Func <,>>

我使用Moq来创建数据集的模拟.

我创建了一个小助手类,它允许我有一个内存存储而不是数据库,使单元测试变得轻而易举.这样我可以添加和删除我的模拟数据集中的项目,这允许我测试我的插入和删除服务调用.

在模拟的设置过程中,我有一行如下所示

this.Setup(i => i.AcademicCycles).Returns(mockStore.GetList<AcademicCycle>());
Run Code Online (Sandbox Code Playgroud)

我的模拟有很多属性,所以我想使用反射执行此设置步骤.我已经设法Returns通过反射工作的过程的一部分,但我坚持lambda方法Setup.

Setup 需要一个

Expression<Func<GoalsModelUnitOfWork, IQueryable<AcademicCycle>>> 对应于 i => i.AcademicCycles

我想动态创建它.使用反射我有以下内容:

物业名称:"AcademicCycles"

类型 IQueryable<AcademicCycle>

类型 AcademicCycle

我也有ilambda语句中的实例,它是一个GoalsModelUnitOfWork

c# reflection lambda expression moq

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

结合Lambda/LINQ中的列表

如果我有类型的变量IEnumerable<List<string>>是有一个LINQ语句或lambda表达式我可以应用于它将组合返回一个IEnumerable<string>

.net c# linq lambda

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

IS运算符是否为unbox值类型?

我找不到以下问题的答案:

object o = 10; // Box
int i = (int)o; // Unbox
Run Code Online (Sandbox Code Playgroud)

很明显,但以下内容尚不清楚

bool isInt = o is int; // Is the unbox here or not?
Run Code Online (Sandbox Code Playgroud)

.net c#

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

是否有库函数或运算符来创建元组?

给定一串数字,我想有一系列元组映射非零字符及其在字符串中的位置.例:

IN: "000140201"
OUT: { (3, '1'); (4, '4'); (6, '2'); (8, '1') }
Run Code Online (Sandbox Code Playgroud)

解:

let tuples = source
             |> Seq.mapi (fun i -> fun c -> (i, c))
             |> Seq.filter (snd >> (<>) '0')
Run Code Online (Sandbox Code Playgroud)

(fun i -> fun c -> (i, c))对于如此简单且可能是常见的操作而言,似乎打字要多得多.声明必要的功能很容易:

let makeTuple a b = (a, b)
let tuples2 = source
              |> Seq.mapi makeTuple
              |> Seq.filter (snd >> (<>) '0')
Run Code Online (Sandbox Code Playgroud)

但在我看来,如果库提供了snd函数,它还应该提供makeTuple函数(可能还有一个较短的名称),或者至少应该相对容易编写.我找不到; 我错过了什么吗?我尝试使用框架的Tuple.Create构建一些东西,但我无法弄清楚如何获得除单参数重载之外的任何东西.

f#

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

接口变量是否具有值类型或引用类型语义?

接口变量是否具有值类型或引用类型语义?

接口按类型实现,这些类型是值类型或引用类型.显然,这两个intstring实现IComparable,并且int是一个值类型,并string为引用类型.但是这个怎么样:

IComparable x = 42;
IComparable y = "Hello, World!";
Run Code Online (Sandbox Code Playgroud)

(我试图回答的问题可能被删除了,因为它询问接口是存储在堆栈还是堆中,而且,正如我们都应该知道的那样,考虑到它们之间的值和引用类型之间的差异更具建设性.语义而不是它们的实现.有关讨论,请参阅Eric Lippert的堆栈是一个实现细节.)

.net c# interface value-type reference-type

10
推荐指数
3
解决办法
7652
查看次数

可用性日历的最佳数据库架构是什么,它允许安排约会(重复发生和单个))

在我的应用程序中,我有一个提供商,有一个时间表和客户从预定时间预约.我需要以下功能.

提供商: - 能够指定重复出现的可用性.例如Mon 9-5,Tues 10-3等. - 能够使数据变黑.例如 - 本周一不可用. - 能够添加单个,而不是重复发生的日期/时间段.例如 - 这个星期六9-5.

客户: - 能够预订单一预约. - 能够预订重复预约.(每周一9-4).

到目前为止,我想出了3个选项:

  1. 将计划划分为30分钟的间隔,并为每个间隔/提供者对创建数据库条目.每个间隔可以是免费的或预订的.当客户预约时,我们将间隔标记为已预订.这种方法的问题在于它浪费了大量空间,而且我不确定搜索性能对于重复出现的预订有多好.
  2. 将每个可用期限保存为"事件".如果它重复出现,请复制该事件.搜索免费插槽时,请搜索预订表以确保没有重叠预订.在这种情况下,搜索重复出现的插槽似乎有点尴尬.要找到明年9月5日可用的所有提供商,我们必须搜索所有匹配的"事件",并找到所有具有52个匹配事件的提供商.
  3. 将每个可用期限保存为"事件".如果它重复出现,请添加一个标志.当搜索免费插槽时,搜索预订表以确保没有重叠预订.它使搜索重复约会变得更容易.为了"黑掉"假设要重复出现的插槽我们可以插入一个假的预订.

schema database-design calendar ruby-on-rails appointment

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

无法从泛型类型转换为接口

我在尝试将通用对象添加到List <>时遇到错误.

它可能与协方差和逆变相关,但我不知道如何解决这个问题.我试图用T:IRegister来限制我的泛型类型.

我有一个接口来表示一个寄存器,然后是两个代表ByteRegister和DoubleWordRegister的类.

public interface IRegister
{
    string Name {get;set;}
}

 public class ByteRegister : IRegister
{
...
}

public class DoubleWordRegister : IRegister
{
...
}
Run Code Online (Sandbox Code Playgroud)

然后我有另一个类,它代表了所有相同类型的这些寄存器的块.

public class RegisterBlock<T> where T:IRegister
{
   private IList<T> _registers;

 ... constructors, properties etc

    public void AddRegister(T register)
    {
        _registers.Add(register);
    }
}
Run Code Online (Sandbox Code Playgroud)

最后我有一个RegisterMap类,用于定义寄存器块列表和块内的每个寄存器.

public class RegisterMap
{
    private List<RegisterBlock<IRegister>> _blocks;

    public RegisterMap()
    {
        _blocks = new List<RegisterBlock<IRegister>>();

        RegisterBlock<ByteRegister> block1= new RegisterBlock<ByteRegister>("Block1", 0);
        block1.AddRegister(new ByteRegister("Reg1"));
        block1.AddRegister(new ByteRegister("Reg2"));
        _blocks.Add(block1);

        RegisterBlock<DoubleWordRegister> block2= new …
Run Code Online (Sandbox Code Playgroud)

c# generics

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

重载+运算符,以便在已检查或未检查的上下文中调用它

更新:我找到了答案,如果没有其他人的话,我会在几天后发布.


我正在创建一个数字结构,所以我正在重载算术运算符.以下是表示4位无符号整数的结构的示例:

public struct UInt4
{
    private readonly byte _value;

    private const byte MinValue = 0;
    private const byte MaxValue = 15;

    public UInt4(int value)
    {
        if (value < MinValue || value > MaxValue)
            throw new ArgumentOutOfRangeException("value");

        _value = (byte) value;
    }

    public static UInt4 operator +(UInt4 a, UInt4 b)
    {
        return new UInt4((a._value + b._value) & MaxValue);
    }
}
Run Code Online (Sandbox Code Playgroud)

重载加法运算符允许此代码:

var x = new UInt4(10);
var y = new UInt4(11);
var z = x + y;
Run Code Online (Sandbox Code Playgroud)

这里,计算溢出,因此变量z具有该值5 …

c# operator-overloading unchecked

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