所以,我有一个从WCF服务公开的方法:
public GetAllCommentsResponse GetAllComments(GetAllCommentsRequest request)
{
var response = new GetAllCommentsResponse();
using(_unitOfWork)
try
{
Guard.ArgNotNull(request, "request");
var results = _unitOfWork.CommentRepository.Get(d => d.Id > 0).ToArray();
//... Do rest of stuff here
}
catch (Exception ex)
{
response.Success = false;
response.FailureInformation = ex.Message;
Logger.LogError("GetAllComments Method Failed", ex);
}
return response;
}
Run Code Online (Sandbox Code Playgroud)
我有一个全局DataUnitOfWork对象(实现IDisposable),当服务调用进来时,Ninject通过构造函数参数实例化.当调试时,如果我使用
using(_unitOfWork)
Run Code Online (Sandbox Code Playgroud)
超出范围后,_unitOfWork对象立即被释放,然后被Ninject再次调用(尽管它被标记为已丢弃,因此没有任何反应.)如果没有using语句,Ninject将处理处理.
长话短说,这是否有一般的经验法则?在我阅读的所有内容似乎表明永远不会使用它,或者在某些折衷的情况下使用它之后,我一直害怕整个IDisposable的东西,但它总是让我感到困惑.
任何输入都表示赞赏.
哦,当我在这里打字时,为什么在处理时确实有GC.SuppressFinalize()的调用?Dispose和Finalize有何不同?
我想递归几个目录,并在n个目录之间找到重复的文件.
我在这方面的下意识是拥有一个全局哈希表或一些其他数据结构来保存我找到的每个文件; 然后检查每个后续文件以确定它是否在"主"文件列表中.显然,我不认为这会非常有效,而且"必须有更好的方法!" 我的大脑里一直响个不停.
任何关于更好地处理这种情况的建议都将受到赞赏.
我试图找出如何将复杂对象从C++ DLL返回到调用C#应用程序.我有一个简单的方法,返回一个工作正常的int.谁能告诉我我做错了什么?
C#应用:
class Program
{
static void Main(string[] args)
{
// Error on this line: "PInvoke: Cannot return variants"
var token = LexerInterop.next_token();
}
}
Run Code Online (Sandbox Code Playgroud)
C#LexerInterop代码:
public class LexerInterop
{
[DllImport("Lexer.dll")]
public static extern object next_token();
[DllImport("Lexer.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int get_int(int i);
}
Run Code Online (Sandbox Code Playgroud)
C++ Lexer.cpp
extern "C" __declspec(dllexport) Kaleidoscope::Token get_token()
{
int lastChar = ' ';
Kaleidoscope::Token token = Kaleidoscope::Token();
while(isspace(lastChar))
{
lastChar = getchar();
}
... Remainder of method body removed ...
return token; …Run Code Online (Sandbox Code Playgroud) 我刚安装了VS 2015社区,在尝试访问IIS中托管的ASP.NET应用程序(使用ASP.NET v4.0应用程序池)时,我收到了该错误消息.
我刚下载了.NET Framework 4.6脱机安装程序,它识别出安装并给了我修复或删除它的选项.我选择修复安装,但它没有修复任何东西.
我还有其他选择吗?
所以,我有以下代码:
private readonly Dictionary<string, IGame> _gameLookup = new Dictionary<string, IGame>();
public T LookupGame<T>(string name) where T : IGame
{
if (name == null) throw new ArgumentNullException("name");
Type t = typeof(T);
if (_gameLookup.Any(d => d.Key == name))
{
return (T)_gameLookup[name];
}
var newInstance = (T)AppDomain.CurrentDomain.GetUnityContainer().Resolve(t, name);
if (newInstance != null)
{
_gameLookup.Add(name, newInstance);
return newInstance;
}
return default(T);
}
public IQueryable<T> ListGames<T>() where T : IGame
{
var games = _gameLookup.Where(d => d.GetType() == typeof (T));
return (IQueryable<T>) games;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是ListGames方法.(LookupGame方法只是包含在我正在做的事情的某些上下文中.) …
我正在关注D2D示例,其中出现了以下代码:
if(!(D2D1_WINDOW_STATE_OCCLUDED & m_renderTarget->CheckWindowState()))
{
m_renderTarget->BeginDraw();
Draw();
if(m_renderTarget->EndDraw() == D2DERR_RECREATE_TARGET)
{
m_renderTarget.Reset();
Invalidate();
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到m_renderTarget使用了 - >(我忘记了它的名字),后来又使用了点运算符.出于某种原因,我认为使用只能使用一个或另一个,具体取决于它是引用类型还是值类型.显然我认为错了,但找不到关于何时使用每个操作员的任何信息(或更多关于点,每个操作员的目的.)
任何澄清将不胜感激.
我有一个简单的自定义对象:
class CertQuestion
{
public string Field {get;set;}
public string Value {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
随后我发现自己在一些代码中使用了List.我正在试图弄清楚如何将CertQuestions列表格式化为相应的字典,并将类似的字段名称组合在一起.例如,给出以下列表:
List<CertQuestion> certQuestions = new List<CertQuestion>()
{
new CertQuestion("Key", "Value1"),
new CertQuestion("Key", "Value2"),
new CertQuestion("Key2", "Value"),
new CertQuestion("Key2", "Value2")
};
Run Code Online (Sandbox Code Playgroud)
我想将它(尝试使用LINQ)转换为带有两个条目的字典,例如
{{"Key", "Value1, Value2"}, {"Key2", "Value, Value2"}}
Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×2
c++ ×2
asp.net ×1
comparison ×1
direct2d ×1
file ×1
generics ×1
idisposable ×1
interop ×1
iqueryable ×1
ninject ×1
pinvoke ×1
windows ×1