我试图找到一种合适的方法来计算两个范围的标量积.例如,A1:A3
和B1:B3
将的产品A1*B1 + A2*B2 + A3*B3
.有没有办法做到这一点?硬编码这个计算对于大范围来说是相当繁琐的.
在C#中,我使用a StreamReader
来读取文件,每行一行.我还保留当前行的编号int
,以报告可能的错误消息.
阅读每一行都会进行一些测试(例如,开头的行#
是注释,需要跳过),所以我打算将整个阅读过程放在一个函数中,这将继续阅读,直到它遇到一个有用的行,然后返回该行.如果遇到EOF
它就会返回null
.
当我将此函数定义为时,我认为我很聪明string read(StreamReader sr, out int lineNumber)
,但现在事实证明C#将无法像lineNumber++
在函数内部那样做.它假定变量尚未分配,可能是因为它无法知道它是否已在此函数调用之前分配.
所以,问题很简单:我如何指定这个变量是一个inout
参数(我认为这是一个术语;我听说它是在其他编程语言的上下文中提到的)?这首先是可能的吗?我绝对不会成为lineNumber
班上的一员,所以这不是一个选择.
在使用C#时,我最近意识到我可以Foo
从Foo
静态函数调用对象的私有函数,甚至可以从其他Foo
对象调用.在我了解了访问修饰符的所有内容之后,这对我来说听起来很奇怪.
据我所知,当你做一些属于某种内部过程的事情时,你会把一个函数设为私有.只有对象本身知道何时使用这些函数,因为其他对象不应该/不能控制对象的流.是否有任何理由为什么同一类别的其他对象应该从这个相当简单的规则中排除?
根据要求,一个例子:
public class AClass {
private void doSomething() { /* Do something here */ }
public void aFunction() {
AClass f = new AClass();
f.doSomething(); // I would have expected this line to cause an access error.
}
}
Run Code Online (Sandbox Code Playgroud) 我记得有些时候(可能是几年前)我在Stackoverflow上阅读了尽可能少的if-tests编程的魅力.这个问题有点相关,但我认为压力在于使用许多小函数,它们根据接收到的参数返回由测试确定的值.一个非常简单的例子就是使用它:
int i = 5;
bool iIsSmall = isSmall(i);
Run Code Online (Sandbox Code Playgroud)
用isSmall()
看起来像这样:
private bool isSmall(int number)
{
return (i < 10);
}
Run Code Online (Sandbox Code Playgroud)
而不只是这样做:
int i = 5;
bool isSmall;
if (i < 10) {
isSmall = true;
} else {
isSmall = false;
}
Run Code Online (Sandbox Code Playgroud)
(逻辑上这段代码只是示例代码.它不是我正在制作的程序的一部分.)
我相信这样做的原因是因为它看起来更好并且使程序员不易出现逻辑错误.如果正确应用了这种编码约定,你几乎看不到任何地方的if-tests,除了那些唯一目的是进行测试的函数.
现在,我的问题是:有关于此约定的任何文档吗?在这种风格的支持者和反对者之间是否有任何地方可以看到疯狂的争论?我试着搜索引入我的Stackoverflow帖子,但我再也找不到了.
最后,我希望这个问题不会被打倒,因为我不是要求解决问题.我只是希望能够听到更多关于这种编码风格的信息,并且可能会提高我将来会做的所有编码的质量.
functional-programming if-statement coding-style conventions
假设我Foo
在C#中有以下构造函数:
public Foo()
{
// ...
}
protected Foo(bool connect)
: this()
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种只this()
在connect
参数出现时才执行该部件的方法true
.这是一种方法吗?
(对于好奇的人:这背后的原因是Foo
类创建了连接到某些东西的对象;当它们被创建时,它们应该总是尝试连接.现在,我正在为它创建一个模拟器(或MOCK)扩展Foo
类这就是我加入了.protected
构造函数;当使用这一块,应该是不会建立实际的连接选项,我想实现这个同时改变Foo
类尽可能少).
这纯粹是出于兴趣.我搜索了一下,知道classes
被调用的实例objects
,但是我找不到struct
C,C++,C#等实例的正确单词.我们甚至还有一个字吗?
我有一个包含C++ DLL项目的解决方案,以及一个将使用此DLL的C#项目(通过使用PInvoke).
dll正在构建到x64/Release
我的解决方案文件夹中的文件夹,这是有道理的,因为这样C#项目不必戳入DLL项目的文件夹.
我想知道现在引用它的正确方法是什么.现在,DLL项目是C#项目的依赖项.我的直觉告诉我,这应该已经足够了,但是C#项目说它无法找到DLL.
我应该只是添加.dll
文件作为参考吗?我认为现在可能会有效,但从长远来看,当项目设置可能会发生变化时会破坏.
我知道这个类似的问题,但它没有回应我的问题.
我.dll
使用Visual Studio 2010 编写了两个.一个是用C++编写的,并且用一个用C++编写的SDK进行通信.另一个是C++库的C#包装器,因此它可以在C#上下文中使用.
我的计划是,这会让我使用我的代码Unity3D
,但显然事实并非如此.似乎Unity3D
不允许我将.dll
s作为资产导入,如果它们不是.NET
汇编.所以我可以添加我的C#包装器,但不能添加C++ dll.
DllNotFoundException
每当我尝试访问C++库时,都会导致这种情况.我试过简单地将C++库复制到Assets/Plugins
文件夹中,但这会产生相同的结果.
有没有办法正确地做到这一点?这是我项目设置中非常重要的一部分.
我正在解析一些分隔符分隔值,如果?
分隔符作为其中一个值的一部分出现,则将其指定为转义字符.
例如:if :
是分隔符,某个字段是值19:30
,这需要写为19?:30
.
目前,我使用string[] values = input.Split(':');
以获取所有值的数组,但在了解了这个转义字符后,这将不再起作用.
有没有办法让Split
逃避字符考虑在内?我检查了重载方法,似乎没有直接这样的选项.
我总是像这样编写我的For循环:
For foo = 1 to 10
' do something
Next
Run Code Online (Sandbox Code Playgroud)
但是,当我在线阅读代码片段时,人们总是这样做:
For foo = 1 to 10
' do something
Next foo
Run Code Online (Sandbox Code Playgroud)
我没有注意到两者之间有任何区别,我找不到任何关于next
声明的文档是更可取的.这两者之间有什么区别(如果有的话)?
c# ×6
c++ ×2
class ×2
dll ×2
c ×1
coding-style ×1
conditional ×1
constructor ×1
conventions ×1
escaping ×1
excel ×1
for-loop ×1
formula ×1
function ×1
if-statement ×1
object ×1
out ×1
parameters ×1
scalar ×1
semantics ×1
split ×1
string ×1
struct ×1
syntax ×1
vba ×1