好的,我还有另一个Code Contracts问题.我有一个接口方法的合同,看起来像这样(为清楚起见省略了其他方法):
[ContractClassFor(typeof(IUnboundTagGroup))]
public abstract class ContractForIUnboundTagGroup : IUnboundTagGroup
{
public IUnboundTagGroup[] GetAllGroups()
{
Contract.Ensures(Contract.Result<IUnboundTagGroup[]>() != null);
Contract.Ensures(Contract.ForAll(Contract.Result<IUnboundTagGroup[]>(), g => g != null));
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我有代码消耗这样的接口:
public void AddRequested(IUnboundTagGroup group)
{
foreach (IUnboundTagGroup subGroup in group.GetAllGroups())
{
AddRequested(subGroup);
}
//Other stuff omitted
}
Run Code Online (Sandbox Code Playgroud)
AddRequested需要一个非空输入参数(它实现具有需要契约的接口),所以我得到了"需要得到证实:组= NULL"在亚错误被传递到AddRequested.我正确使用ForAll语法吗?如果是这样,并在求解根本不理解,有另一种方式来帮助求解承认合同或者我只需要使用时GetAllGroups()被调用的假设?
我认为有一种更短的方式来编写这个foreach循环,创建一个深层的副本SortedDictionary<string, object>.请注意,这object只是一个占位符,我真的在那里使用其他一些引用类型.谢谢!
这是代码:
foreach (KeyValuePair<string, object> entry in sortedDictionary)
{
this.mSortedDictionary.Add(entry.Key, new object());
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个有一些"模块"的项目.我在这里称之为模块的是一个简单的类,它实现了一个特定的功能,并从一个强制接口的抽象类GenericModule派生.
应该在将来添加新模块.
可以同时加载模块的多个实例,也可以不加载,具体取决于配置文件.
我认为,如果未来的开发人员能够在一个简单的行中"注册"他的模块系统就会很棒.或多或少与他们在谷歌测试中注册测试的方式相同.
我正在使用visual studio 2005构建项目.代码完全在库中,除了exec项目中的main().我想保持这种方式.
我在谷歌测试中找到了灵感.
我创建了一个模板化的工厂.看起来或多或少像这样(我跳过了不感兴趣的部分,以保持这个问题有点可读):
class CModuleFactory : boost::noncopyable
{
public:
virtual ~CModuleFactory() {};
virtual CModuleGenerique* operator()(
const boost::property_tree::ptree& rParametres ) const = 0;
};
template <class T>
class CModuleFactoryImpl : public CModuleFactory
{
public:
CModuleGenerique* operator()(
const boost::property_tree::ptree& rParametres ) const
{
return new T( rParametres );
}
};
Run Code Online (Sandbox Code Playgroud)
和一个应该注册模块并将其工厂添加到列表的方法.
class CGenericModule
{
// ...
template <class T>
static int declareModule( const std::string& rstrModuleName )
{
// creation de la factory
CModuleFactoryImpl<T>* …Run Code Online (Sandbox Code Playgroud) 我有一个
multimap<key1,pair<key2, value2>>
Run Code Online (Sandbox Code Playgroud)
我想在这个多图中更改 value2。
typedef std::pair<int, int> comp_buf_pair; //pair<comp_t, dij>
typedef std::pair<int, comp_buf_pair> node_buf_pair;
typedef std::multimap<int, comp_buf_pair> buf_map; //key=PE, value = pair<comp_t, dij>
typedef buf_map::iterator It_buf;
buf_map bufsz_map;
bufsz_map.insert(node_buf_pair(target(*ei,g), comp_buf_pair(comp_t[target(*ei,g)], dij)));
for(It_buf it = bufsz_map.equal_range(*u_iter).first; it!= bufsz_map.equal_range(*u_iter).second;)
{
comp_buf_pair it1 = it->second;
if(it1.first < c_i)
{
std::cout << it1.first << " : " << it1.second << std::endl;
old_c_i = it1.first;
old_dij = it1.second;
updated_dij = (c_i-old_c_i) + old_dij;
// I would like to erase the it1.second value and add …Run Code Online (Sandbox Code Playgroud) using System;
interface IAnimal
{
}
class Cat: IAnimal
{
}
class Program
{
public static void Main(string[] args)
{
IAnimal cat = new Cat();
// Console.WriteLine(cat.GetType());
// This would only give me the type of
// the backing store, i.e. Cat. Is there a
// way I can get to know that the identifier
// cat was declared as IAnimal?
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud)
更新: 感谢Dan Bryant的提醒.
using System;
using System.Reflection;
using System.Collections.Generic;
using System.Linq;
namespace TypeInfo
{
class Program …Run Code Online (Sandbox Code Playgroud) 我知道.NET应用程序很难保护.我使用RedGate Reflector并且知道一般来说你可以从许多.NET dll获得源代码.
但我的问题是 - 反编译整个应用程序实际上是否可行?
我的意思是 - 创建一个可行的VS解决方案,以便盗版者可以按F5并获得与他的机器上的作者完全相同的结果?
Microsoft SQL Server中的模数函数仅适用于某些数据类型.
根据关于模数运算符的MSDN文章[1],你通常会使用这样的模数...
dividend % divisor
dividend
Is the numeric expression to divide. dividend must be a valid
expression of any one of the data types in the integer and
monetary data type categories, or the numeric data type.
divisor
Is the numeric expression by which to divide the dividend.
divisor must be any valid expression of any one of the data
types in the integer and monetary data type categories, or
the numeric data type.
Run Code Online (Sandbox Code Playgroud)
但是,当被除数是浮点数据类型时,这不起作用.我们提出的答案列在下面以供将来参考.
在使用事件源聚合后端构建在DDD原则的环境中,如何将单独的聚合根(AR)相互通信?
例如,我有一个Facility聚合根(AR),它有一个负责创建BookingAR 的工厂方法.这Booking是PersonAR和FacilityAR 的时间敏感组合.A Person只能预订一个Facility.
在DDD中,我会保留对Bookingin Person和Personin的引用Facility.但是,当生成用于事件源的事件时,我认为尝试从后端处理事件反序列化将变得令人望而却步.因此,我只采用了对基于对象的值唯一id的引用.然而,这会带来一个新问题,当AR上的方法需要在另一个AR上调用另一个方法时 - 您如何处理这种情况?从域AR命中事件源存储库?
这种情况下的一般用例是什么?我接近这一切都错了吗?
我想用自己的代码替换3d party API中的一行代码.
我的意思是这是一个值得怀疑的做法,但我需要修复他们的错误.
我正在尝试向GAC添加.NET 4.0 .dll.我试图这样做是因为它是由第三方公司发布的32和64位.dll,我必须在两种格式的不同平台上使用不同的应用程序.
无论如何,我无法在Windows Server 2008环境中将此dll注册到GAC.
我尝试将本地计算机上"C:\ Program Files(x86)\ Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools"中的gacutil.exe(和支持文件)复制到"C:\ Windows"\Microsoft.NET\Framework\v4.0.30319"目标生产服务器上的文件夹,根据此处提供的建议.
然后我尝试将它们复制到"C:\ Windows\Microsoft.NET\Framework64\v4.0.30319".
从两个位置运行表明安装成功.事实上,注册似乎是成功的:
但是,使用以下消息运行引用dll(64位)版本的控制台应用程序错误:
System.IO.FileNotFoundException:无法加载文件或程序集"ChilkatDotNet4.dll"或其依赖项之一.指定的模块无法找到.文件名称:'ChilkatDotNet4.dll'
所以,我现在已经使用mkdir手动创建了以下GAC条目并从命令提示符复制(实际上可能有也可能没有.我不知道gacutil.exe有什么特别之处):
在每次"安装"dll之后,我测试并收到了同样的错误.欢迎任何想法!
编辑:上面的GAC问题实际上可能不是罪魁祸首.事实证明,即使我创建一个全新的Console App项目并直接添加.dll(以便它存在于bin中),我仍然无法在服务器上运行它.此外,我注意到控制台应用程序是针对.NET 4.0客户端配置文件而不是.NET Framework 4创建的.当我尝试针对客户端配置文件运行它时,似乎没有任何System.Web*库可用.但是,我尝试运行一个非常简单的测试应用程序,同时针对两者,并且在引用坏的.dll时都不会在服务器上运行.
是否有一种特殊的安装方式可以运行.NET 4.0控制台应用程序?
c# ×4
.net ×3
reflection ×3
c++ ×2
.net-4.0 ×1
cqrs ×1
decompiling ×1
dll ×1
forall ×1
gac ×1
gacutil ×1
math ×1
sql-server ×1
stl ×1
t-sql ×1