在尝试Vector2<int/float/double>在C#中实现泛型之后,我自己遇到了这个问题,我已经对这个问题进行了一系列调查,这个问题也有描述:
这些链接包含更多背景信息和迷人的解决方案方法:
http://www.yoda.arachsys.com/csharp/genericoperators.html
http://www.codeproject.com/KB/cs/genericnumerics.aspx
既然C#4.0已经推出了新的多功能dynamic类型,我对这个精彩的SO社区的问题是:它是一个可以用来构建高性能,通用Vector/Matrix /等的工具.数字类型?
显然,Vector2可以通过以下方式构建:
public struct Vector2
{
public dynamic X;
public dynamic Y;
public Vector2(dynamic x, dynamic y)
{
this.X = x;
this.Y = y;
}
public static Vector2 operator+(Vector2 a, Vector2 b)
{
return new Vector2(a.X + b.X, a.Y + b.Y);
}
}
Run Code Online (Sandbox Code Playgroud)
但是使用这种方法我们在这里没有类型约束,所以你可以做一个Vector2(3, 12.4572).有没有一种方法可以将动态成员与类型参数混合Vector2<int>来执行我们的数学运算,就像使用ints一样?
也许某种形式的铸造可以用来确保this.X是T,虽然我不知道它会如何表现.
说我有一个数组:
my @arr = (1,2,3,4,5);
Run Code Online (Sandbox Code Playgroud)
现在我可以通过foreach迭代它:
foreach ( @arr ) {
print $_;
}
Run Code Online (Sandbox Code Playgroud)
但有没有办法从第二个(例如)迭代到最后一个?
提前致谢.
我有一个带逆变型参数的接口,比如说IFoo:
interface IFoo<in T> {}
Run Code Online (Sandbox Code Playgroud)
现在我有三个班:
class B {}
class D : B {}
class Foo : IFoo<B> {}
Run Code Online (Sandbox Code Playgroud)
如果我这样注册他们
container.RegisterType<IFoo<B>, Foo>();
Run Code Online (Sandbox Code Playgroud)
...然后尝试解决IFoo<D>,它失败,因为我没有真正注册IFoo<D>或IFoo<>
.很明显.
我当前的解决方案是迭代Registrations,找到RegisteredType可以从解析类型(IFoo<D>在我的情况下)分配的注册然后解析它的MappedToType类型.
问题很简单:有更好的方法吗?任何意见,将不胜感激.
谢谢.
编辑:
多一点背景.
我有一些映射器.
IMapper<in TSource, in TDest> : IMapper // IMapper is non-generic
{
void Map(TSource source, TDest dest);
}
Run Code Online (Sandbox Code Playgroud)
我想只登记基础映射器(其中TSource是IEnumerable<T>),并能够解决此映射为每一个实现类型IEnumerable<T>,例如用于T[]:
object source = GetSource(); // runtime type is T[] …Run Code Online (Sandbox Code Playgroud) 我正在写WinPhone 8.1应用程序.代码非常简单,适用于大多数情况:
string htmlContent;
using (var client = new HttpClient())
{
htmlContent = await client.GetStringAsync(GenerateUri());
}
_htmlDocument.LoadHtml(htmlContent);
Run Code Online (Sandbox Code Playgroud)
但有时会抛出异常
htmlContent = await client.GetStringAsync(GenerateUri());
Run Code Online (Sandbox Code Playgroud)
InnerException {System.ArgumentException:'windows-1251'不是受支持的编码名称.参数名称:System.Globalization.EncodingTable.internalGetCodePageFromName(String name)的名称,
位于System.Net.Http.HttpContent的System.Globalization.EncodingTable.GetCodePageFromName(String name).<> c__DisplayClass1.b__0(任务任务)} System.Exception {System.ArgumentException}
HttpClient是否支持1251编码?如果没有,我该如何避免这个问题呢?或者是目标页面问题?或者我错了什么?
c# httpclient character-encoding windows-phone-8.1 windows-1251
我有一个界面:
interface IKey<TId, TName>
where TId: IEquatable<TId>
where TName: IEquatable<TName>
{
TId Id { get; set; }
TName Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我像这样实现IKey:
class Item : IKey<int, string>
{
int Id { get; set; }
string Name { get; set; }
//...
}
Run Code Online (Sandbox Code Playgroud)
我有可以使用这些项目的集合
class ItemCollection<T>
where T : IKey<TId, TName> //Any type that implements IEquatable<...>
where TId: IEquatable<TId>
where TName: IEquatable<TName>
{
//...
}
Run Code Online (Sandbox Code Playgroud)
问题是它不起作用.有没有办法可以正确地做到这一点?
还有另一个实现IEquatable,使用IKey<out TId, out TName>和IKey<object, object>但它不适用于值类型和用途Object.Equals …
我有div,包含一些html格式的文本normal, <b>bold</b>, <i>italic</i>.我需要更改该div中所有粗体文本的字体大小.
所以问题是如何在html/css或js中执行此操作?
我想使用linq to Entities来提供top按降序列排序的记录Value1.
我知道我写的像:
MyCollection.OrderByDescending(item => item.Value1).FirstOrDefault();
但是我该如何使用以下方法Top呢?
System.Data.Objects.ObjectQuery.Top(string,params System.Data.Objects.ObjectParameter [])
我遇到了难以对包含数字的列表项字符串进行排序.我希望我可以自动从最小到最大排序.这是我的代码:
// Initialize an array to store the numbers
List<string> tab_num = new List<string>();
tab_num.Add("A.3.2.1");
tab_num.Add("A.3.3.1");
tab_num.Add("A.1.0.1");
tab_num.OrderByDescending(num => num).ToList();
Run Code Online (Sandbox Code Playgroud)
为什么我的结果是假的?...
[1] A.3.2.1
[2] A.3.3.1
[3] A.1.0.1
Run Code Online (Sandbox Code Playgroud)
预期结果:
[1] A.1.0.1
[2] A.3.2.1
[3] A.3.3.1
Run Code Online (Sandbox Code Playgroud)
非常感谢