是否有任何工具可以从正在运行的应用程序中获取堆转储并根据源代码的创建位置确定/分组对象?
没有更改源代码,理想情况下是免费的.
请考虑以下代码:
StockcheckJobs =
(from job in (from stockcheckItem in MDC.StockcheckItems
where distinctJobs.Contains(stockcheckItem.JobId)
group stockcheckItem by new { stockcheckItem.JobId, stockcheckItem.JobData.EngineerId } into jobs
select jobs).ToList()
let date = MJM.GetOrCreateJobData(job.Key.JobId).CompletedJob.Value
orderby date descending
select new StockcheckJobsModel.StockcheckJob()
{
JobId = job.Key.JobId,
Date = date,
Engineer = (EngineerModel)job.Key.EngineerId,
MatchingLines = job.Count(sti => sti.Quantity == sti.ExpectedQuantity),
DifferingLines = job.Count(sti => sti.Quantity != sti.ExpectedQuantity)
}).ToList()
Run Code Online (Sandbox Code Playgroud)
ToList()中间有一个因为该GetOrCreateJobData方法无法转换为sql.
因此,我必须用括号括起我的查询的第一部分来执行此操作,然后我使用外部查询来完成.
我知道我可以把它分成两个变量,但我不想这样做(这也是在一个对象初始化器中).
有什么其他语法我可以用来增加可读性,最好不需要外部内部查询,当我必须ToList在linq查询中间做一个(或以其他方式获取linq到对象)?
在一个理想的世界里,我喜欢这样的东西(尽可能接近):
StockcheckJobs =
from stockcheckItem in MDC.StockcheckItems
where distinctJobs.Contains(stockcheckItem.JobId)
group stockcheckItem by …Run Code Online (Sandbox Code Playgroud) 我是这个LINQ领域的新手,有一件事我想做.
我有一个动作委托(如下所示),我想在lambda表达式中转换.
Action<string> custom = delegate(string name)
{
lstCutomers.Add(new Customer(name, coutries[cnt]));
name = name + " Object Created";
};
Run Code Online (Sandbox Code Playgroud)
同样的lambda表达式是什么.我只是想知道我可以在lambda中写多个语句,如果没有那么为什么?
提前致谢.
请考虑以下代码:
var vectorTest = new Vector2(1, 2) + new Vector2(3, 4); // Works
var x = Expression.Parameter(typeof(Vector2), "x");
var test = System.Linq.Dynamic
.DynamicExpression.ParseLambda(new[] { x }, null, "x = x + x");
Run Code Online (Sandbox Code Playgroud)
运行它,我得到以下例外:
System.Linq.Dynamic.ParseException未由用户代码处理Message = Operator'+'与操作数类型'Vector2'和'Vector2'不兼容Source = DynamicLINQ Position = 6
如何让解析器"看到" 类型的+运算符重载Vector2?
编辑:我也与=运营商有同样的问题.
查看源代码我可以看到原因,它查看了一个特殊的接口,列出了大量的方法,对于简单的类型,如果它找不到它,那么就会引发异常.麻烦的是,我的type(Vector2)不在该列表中,所以它永远不会找到运算符方法.
我想知道数组的索引是否可以在C#中给出一个名称而不是默认的索引值.我基本上寻找的是以下PHP代码的C#等价物:
$array = array(
"foo" => "some foo value",
"bar" => "some bar value",
);
Run Code Online (Sandbox Code Playgroud)
干杯.
此代码接收GZip编码的字符串.我怎么解码呢?
Stream stream = ret.GetResponseStream();
System.IO.StreamReader reader = new System.IO.StreamReader(stream, Encoding.Default);
string answer = reader.ReadToEnd();//answer is GZip encoded string !
byte[] bytes = Encoding.Default.GetBytes(answer);
//???
GZipStream compStream = new GZipStream(stream, CompressionMode.Decompress);
// ... what's next?
Run Code Online (Sandbox Code Playgroud) 什么相当于lambda表达式中的以下代码片段?
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
var pairs =
from a in numbersA
from b in numbersB
where a < b
select new { a, b };
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(@"<Parts>
<Part name=""DisappearsOk"" disabled=""true""></Part>
<Part name=""KeepMe"" disabled=""false""></Part>
<Part name=""KeepMe2"" ></Part>
<Part name=""ShouldBeGone"" disabled=""true""></Part>
</Parts>");
XmlNode root = xmlDoc.DocumentElement;
List<XmlNode> disabledNodes = new List<XmlNode>();
try
{
foreach (XmlNode node in root.ChildNodes.Cast<XmlNode>()
.Where(child => child.Attributes["disabled"] != null &&
Convert.ToBoolean(child.Attributes["disabled"].Value)))
{
Console.WriteLine("Removing:");
Console.WriteLine(XDocument.Parse(node.OuterXml).ToString());
root.RemoveChild(node);
}
}
catch (Exception Ex)
{
Console.WriteLine("Exception, as expected");
}
Console.WriteLine();
Console.WriteLine(XDocument.Parse(root.OuterXml).ToString()); …Run Code Online (Sandbox Code Playgroud) 我有一个具有此成员的接口(由存储库使用):
T FindById<T, TId>(TId id)
where T : class, IEntity<TId>
where TId : IEquatable<TId>;
Run Code Online (Sandbox Code Playgroud)
这允许调用者指定实体类型(T)及其Id字段类型(TId).然后,此接口的实现者将查找类型的实体,T并使用该id参数根据其id(已定义IEntity<TId>)对其进行过滤.
目前我这样称呼它:
int id = 123;
var myApproval = PartsDC.FindById<Approval, int>(id);
Run Code Online (Sandbox Code Playgroud)
理想情况下我想这样做:
int id = 123;
var myApproval = PartsDC.FindById<Approval>(id);
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这个问题的答案:
我知道我不能得到我想要的语法,但可以接近.由于我的通用参数约束,我无法在我的情况下完全设置它.
这是我到目前为止所拥有的:
public class FindIdWrapper<T> where T : class
{
public readonly IDataContext InvokeOn;
public FindIdWrapper(IDataContext invokeOn)
{
InvokeOn = invokeOn;
}
T ById<TId>(TId id) where TId : IEquatable<TId>
{
return InvokeOn.FindById<T, …Run Code Online (Sandbox Code Playgroud) 考虑以下课程:
public class DerivedClassPool<TBase> where TBase : class
{
public TBase Get(Type componentType)
{
// Not important, but you get the idea
return Activator.CreateInstance(componentType) as TBase;
}
public TDerived SomeMethod<TDerived>() where TDerived : TBase
{
return Get(typeof(TBase)) as TDerived;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我已经将TBase泛型类参数限制为一个类:where TBase : class
我还将TDerived泛型方法参数限制为TBase或从中派生出来的东西:where TDerived : TBase.
我在线上收到错误as TDerived:
类型参数'TDerived'不能与'as'运算符一起使用,因为它没有类类型约束,也没有'class'约束
我明白为了防止错误我需要添加约束class,所以我得到:
where TDerived : class, TBase
Run Code Online (Sandbox Code Playgroud)
当TBase已经被限制为一个类并且TDerived被限制为一个类TBase或从它派生时,为什么我必须这样做?
c# ×10
linq ×4
.net ×2
generics ×2
lambda ×2
arrays ×1
dynamic-linq ×1
exception ×1
gzip ×1
gzipstream ×1
indexing ×1
inheritance ×1
linq-to-sql ×1
performance ×1
profiling ×1
readability ×1
stream ×1
syntax ×1