StringBuilder似乎没有Substring(start,len)方法......我在这里缺少什么?
我在代码中使用MsBuild 4.0,如下所示:
var globalProperties = new Dictionary<string, string>();
var buildRequest = new BuildRequestData(solutionPathAbsolute, globalProperties, null, new string[] { "Build" }, null);
var pc = new ProjectCollection();
var result = BuildManager.DefaultBuildManager.Build(new BuildParameters(pc), buildRequest);
Run Code Online (Sandbox Code Playgroud)
请注意这个API与MsBuild 3.5的完全不同...如何在记录器中挂钩以使用新API接收详细的构建消息?
我正在写第二人称只是因为它很容易,对你而言.
你正在使用一个游戏引擎,并且真的希望特定的引擎类有一个新的方法来做'bla'.但是你宁愿不将你的"游戏"代码传播到"引擎"代码中.
因此,您可以使用一种新方法从中派生一个新类,并将该代码放在"游戏"源目录中,但也许还有另一种选择?
所以这在C++语言中可能完全是非法的,但是你首先想到,"也许我可以通过我自己的标题向现有类添加一个新方法,其中包含'父'标题和一些特殊语法.这在工作时是可行的使用命名空间,例如..."
假设你不能在多个标题中声明一个类的方法(并且你很可能不能确定),那么支持"中间件/引擎/库"和"应用程序"之间的清晰划分的其他选项是什么,你奇迹?
这个相当不优雅的方法采用对象的输入数组并输出字符串结果,这是每个元素的ToString()结果,空格分隔.
string Format(object[] args)
{
var res = string.Empty;
foreach (var o in args)
{
res += o.ToString();
if (o != args.Last())
res += " ";
}
}
Run Code Online (Sandbox Code Playgroud)
当然有一个C#方法隐藏在某处进行这种类型的操作,或者如果不是,使用Linq更优雅的方式来编写它?关于我如何编写此方法的另一个问题是通过逐步构建字符串来生成垃圾.
我想测试一个点是否在球体的特定距离内.
所以你有这些变量......
Point3F spherePnt;
F32 sphereRadius;
Point3F testPnt;
Run Code Online (Sandbox Code Playgroud)
我可以...
F32 dist = ( spherePnt - testPnt ).len() - sphereRadius;
Run Code Online (Sandbox Code Playgroud)
如果dist为正,则它在半径之外,如果dist为负,则它在半径内.
或者作为避免len()函数中的平方根的优化,您可以尝试这个...
F32 dist = ( spherePnt - testPnt ).lenSquared() - ( sphereRadius * sphereRadius );
Run Code Online (Sandbox Code Playgroud)
好吧,这看起来像乍看之下,但显然它实际上给了我不正确的结果.
例如,给定的变量就像这样设置......
SpherePnt( 0, 0, 0 )
SphereRadius( 1 )
testPnt( 1, 1, 1 )
Run Code Online (Sandbox Code Playgroud)
取结果......
F32 dist = ( spherePnt - testPnt ).len() - sphereRadius;
F32 dist2 = mSqrt( ( spherePnt - testPnt ).lenSquared() - ( sphereRadius * sphereRadius ) );
dist = 0.7320508075688772935274463415059; …Run Code Online (Sandbox Code Playgroud)