我有一个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) 我有一个这样的课:
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的做法是什么?
我使用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
如果我有类型的变量IEnumerable<List<string>>是有一个LINQ语句或lambda表达式我可以应用于它将组合返回一个IEnumerable<string>?
我找不到以下问题的答案:
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) 给定一串数字,我想有一系列元组映射非零字符及其在字符串中的位置.例:
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构建一些东西,但我无法弄清楚如何获得除单参数重载之外的任何东西.
接口变量是否具有值类型或引用类型语义?
接口按类型实现,这些类型是值类型或引用类型.显然,这两个int和string实现IComparable,并且int是一个值类型,并string为引用类型.但是这个怎么样:
IComparable x = 42;
IComparable y = "Hello, World!";
Run Code Online (Sandbox Code Playgroud)
(我试图回答的问题可能被删除了,因为它询问接口是存储在堆栈还是堆中,而且,正如我们都应该知道的那样,考虑到它们之间的值和引用类型之间的差异更具建设性.语义而不是它们的实现.有关讨论,请参阅Eric Lippert的堆栈是一个实现细节.)
在我的应用程序中,我有一个提供商,有一个时间表和客户从预定时间预约.我需要以下功能.
提供商: - 能够指定重复出现的可用性.例如Mon 9-5,Tues 10-3等. - 能够使数据变黑.例如 - 本周一不可用. - 能够添加单个,而不是重复发生的日期/时间段.例如 - 这个星期六9-5.
客户: - 能够预订单一预约. - 能够预订重复预约.(每周一9-4).
到目前为止,我想出了3个选项:
我在尝试将通用对象添加到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) 更新:我找到了答案,如果没有其他人的话,我会在几天后发布.
我正在创建一个数字结构,所以我正在重载算术运算符.以下是表示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# ×8
.net ×4
lambda ×3
linq ×2
reflection ×2
.net-3.5 ×1
appointment ×1
calendar ×1
expression ×1
f# ×1
generics ×1
interface ×1
moq ×1
schema ×1
unchecked ×1
value-type ×1