使用隐式运算符有什么问题,如下所示:
//linqpad c# program example
void Main()
{
var testObject = new MyClass<int>() { Value = 1 };
var add = 10 + testObject; //implicit conversion to int here
add.Dump(); // 11
}
class MyClass<T>
{
public T Value { get; set; }
public static implicit operator T (MyClass<T> myClassToConvert)
{
return myClassToConvert.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
我想我可以这样对待为对象的值类型的实例,但看到我从来没有见过这样我想也许有一个理由的例子并不做这样的事情,有人能指出?
在我实际的代码,我想这样的数据抽象层的一部分,这样我就可以用信息返回对象描述的基础数据,但允许逻辑代码把它当作一个值类型时都需要知道是值,同时保持一切美观,并与泛型类型安全.
我用一个节点创建了一个基本的XmlDocument:
XmlDocument bigDoc = new XmlDocument();
bigDoc.LoadXml("<Request></Request>");
Run Code Online (Sandbox Code Playgroud)
我正在获取另一个我想在<Request>
节点内插入的XmlDocument .它对我不起作用:
XmlNode requestNode = bigDoc.FirstChild;
requestNode.AppendChild(anotherXMLDocument);
Run Code Online (Sandbox Code Playgroud)
它引发了一个例外.
如何在另一个XmlDocument节点中插入XmlDocument?
假设我有一个部分视图,UserDetails
其@model
子句被设置为一个名为的模型类User
.
现在假设我有另一个看起来像这样的模型类:
public sealed class SpecialModel
{
public User SpecialUser;
public ... // other stuff
}
Run Code Online (Sandbox Code Playgroud)
在视图中SpecialModel
,我想调用上面提到的局部视图:
@model MyProject.Models.SpecialModel
@{ ViewBag.Title = "..."; }
<div class='user'>@Html.Partial("UserDetails", Model.SpecialUser)</div>
Run Code Online (Sandbox Code Playgroud)
如果用户不是null
这样,这可以正常工作.但是,如果用户是null
,我得到这个例外:
System.InvalidOperationException
:传递到字典中的模型项的类型为"MyProject.Models.SpecialModel",但此字典需要"MyProject.Models.User"类型的模型项.
显然,异常消息是谎言.如何正确解决这个问题,以便我能null
正常通过?
有一些免费软件工具(例如,Taskbar Shuffle,XNeat等),它们能够改变任务栏上按钮的顺序,而无需实际关闭或打开任何窗口.不幸的是,它们似乎都不是开源的.
更改任务栏中按钮顺序所需的API调用是什么?
我有一个有趣的问题:给定一个IEnumerable<string>
,是否有可能IEnumerable<IEnumerable<string>>
在一次传递中产生一组相同的相邻字符串?
让我解释.
1.基本说明性样本:
考虑以下IEnumerable<string>
(伪表示):
{"a","b","b","b","c","c","d"}
Run Code Online (Sandbox Code Playgroud)
如何获得一个IEnumerable<IEnumerable<string>>
会产生某种形式的东西:
{ // IEnumerable<IEnumerable<string>>
{"a"}, // IEnumerable<string>
{"b","b","b"}, // IEnumerable<string>
{"c","c"}, // IEnumerable<string>
{"d"} // IEnumerable<string>
}
Run Code Online (Sandbox Code Playgroud)
方法原型将是:
public IEnumerable<IEnumerable<string>> Group(IEnumerable<string> items)
{
// todo
}
Run Code Online (Sandbox Code Playgroud)
但它也可能是:
public void Group(IEnumerable<string> items, Action<IEnumerable<string>> action)
{
// todo
}
Run Code Online (Sandbox Code Playgroud)
...... action
每个子序列都会被调用.
2.更复杂的样本
好的,第一个样本非常简单,只是为了使高级意图清晰.
现在假设我们正在处理IEnumerable<Anything>
,在这里Anything
定义的类型如下:
public class Anything
{
public string Key {get;set;}
public double Value {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我们现在想要生成基于Key的子序列(Anything
将具有相同键的每个连续组分组)以便稍后使用它们以便按组计算总值:
public void Compute(IEnumerable<Anything> items) …
Run Code Online (Sandbox Code Playgroud) 我有两个表达式树定义如下:
private Expression<Func<TEntity, TPropertyResult>> PropertyAccessor { get; set; }
Run Code Online (Sandbox Code Playgroud)
和
private Expression<Func<TPropertyResult, bool>> TestExpression { get; set; }
Run Code Online (Sandbox Code Playgroud)
我需要创建一个新的表达式树,它将产生相当于:
var expression = p => this.TestExpression(this.PropertyAccessor(p));
Run Code Online (Sandbox Code Playgroud)
使用时Expression.Invoke(this.TestExpression, this.PropertyAccessor)
,我收到以下错误
{"类型'System.Func`2 [MyEntity,System.String]'的表达式不能用于'System.String'类型的参数"}
TPropertyResult
我测试时是一个字符串.
我试过用Expression.Call
或者Expression.Invoke
.没运气.我该怎么用?
是否有适用于手机的代码编辑器(如eclipse或visual studio)(如诺基亚5800)?
所以我想要的是在手机上编辑我的C/C++/C#代码.(我有诺基亚,所以这是我的主要兴趣,但我也对其他手机感兴趣,比如基于Android的手机.)
我不需要编译的能力,但我喜欢编码和代码突出显示.
我生成了一个像这样的xml文件:
XElement employees =
new XElement("Work",
new XElement("record",
new XElement("Name", textBox1.Text),
new XElement("Phone", "206-555-0144"),
new XElement("Address",
new XElement("Street1", "123 Main St"),
new XElement("City", "Mercer Island"),
new XElement("State", "WA"),
new XElement("Postal", "68042")
)),
new XElement("record",
new XElement("Name", "22222"),
new XElement("Phone", "353245345"),
new XElement("Address",
new XElement("Street1", "sdfain St"),
new XElement("City", "asdf Island"),
new XElement("State", "QLD"),
new XElement("Postal", "54322")
)),
new XElement("record",
new XElement("Name", "Peter"),
new XElement("Phone", "1234"),
new XElement("Address",
new XElement("Street1", "sd St"),
new XElement("City", "cbr"),
new XElement("State", "act"),
new XElement("Postal", "2600") …
Run Code Online (Sandbox Code Playgroud) 这让我非常难过.也许我现在太累了.
Rectangle rectangle = new Rectangle(0, 0, image.Width, image.Height);
Rectangle cropArea = inputArea == null ? rectangle : inputArea.Value;
if (inputArea == null)
cropArea = rectangle;
Run Code Online (Sandbox Code Playgroud)
inputArea是一个可以为null的Rectangle,在我的特定情况下为null.
前两个语句将cropArea初始化为0.然而,第二个语句根据图像宽度和高度生成正确的cropArea.我是否误解了条件运算符的任何内容?当inputArea = null时,它似乎不返回矩形?使用值类型时是否有任何怪癖?
编辑:好吧,我应该先尝试一下:重启VS. 似乎调试器骗了我,或者其他东西.无论如何,现在工作.谢谢.
c# ×8
.net ×3
algorithm ×1
asp.net-mvc ×1
button ×1
c ×1
editor ×1
generics ×1
ienumerable ×1
insert ×1
lambda ×1
linq ×1
mobile ×1
nullable ×1
performance ×1
taskbar ×1
value-type ×1
winapi ×1
windows ×1
xml ×1
xmldocument ×1
xmlnode ×1