我使用以下内容写入文件:
using(Stream FileStream = File.OpenWrite(FileName))
FileStream.Write(Contents, 0, Contents.Length);
Run Code Online (Sandbox Code Playgroud)
我注意到它只是正确地写入文件文件,但没有先擦除文件的内容.然后我决定简单地使用:
File.WriteAllBytes(FileName, Contents);
Run Code Online (Sandbox Code Playgroud)
这很好.
但是,为什么File.OpenWrite不会像我使用的其他语言那样自动删除文件的内容,而是用于OpenWrite样式函数,而不是追加?
有没有办法做到这一点?
我有两个函数的MethodBases:
public static int Add(params int[] parameters) { /* ... */ }
public static int Add(int a, int b) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
我有一个通过我制作的类调用MethodBases的函数:
MethodBase Method;
object Target;
public object call(params object[] input)
{
return Method.Invoke(Target, input);
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我AddTwoMethod.call(5, 4);工作正常.
如果我使用AddMethod.call(5, 4);它返回:
未处理的异常:System.Reflection.TargetParameterCountException:参数与签名不匹配
是否有任何方法可以使两个调用都正常工作而无需手动将参数放入数组中params int[]?
我打算将我的游戏从过剩迁移到sdl.
它完全适应过剩,但我想使用一些sdl功能.
所以我进入我的项目属性,在目标标题下我单击要编译的程序,构建阶段,链接二进制文件库,添加SDL.framework
与我为OpenGL.framework和GLUT.framework完成的操作完全相同
但是,当我添加:#include <SDL/SDL.h>当我尝试构建时,它会出现链接器错误:
Undefined symbols for architecture x86_64:
"_main", referenced from:
__start in crt1.o
(maybe you meant: _SDL_main)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
谷歌搜索只会导致一些公平的结果,但没有真正的解释.
我有一个功能,那就是如果一个列表已经改变了自上次打电话叫,这将是实现这个的最佳方式?
例如:
List<A> OurList = new List<A>();
private void Update()
{
Boolean Changed = //?
if(Changed) CheckList(OurList);
}
Run Code Online (Sandbox Code Playgroud)
我会假设make变量来存储旧列表并进行比较,但是如何将旧列表更新到新列表而不将其全部复制出来?(如果我进行分配,它也会更新"旧列表")
我有一个由base36(0-9然后是az)组织的文件夹列表.现在我读取它们的当前实现是迭代一个数字,将其转换为base32,检查文件夹是否存在.如果它没有结束,它确实读取了数据.
这里的问题是文件夹的数字有差距.例如:0,1,2,4,5,6,8,a,b,c,g,k,p
以正确的顺序迭代它们的最佳方法是什么(考虑到可以有任意数量的文件夹)?
(注意:我不能简单地获取所有目录,因为它们按字母顺序排列.例如2A将放在z之前)
我的意思是,如果我想要if语句有一个else,那么这是不好的做法,但是有一个嵌套的if语句"以我的方式"所以我使用了一个空白的else语句,例如"else;" 或"别的{}"逃脱它?
例如:
if (lsvAddons.SelectedItems.Count > 0)
foreach (ListViewItem A in lsvAddons.SelectedItems)
if (Addons[A.Index] != null) Addons[A.Index].DoHelp();
else { }
else Console.WriteLine(_GenericHelpString);
Run Code Online (Sandbox Code Playgroud)
VS:
if (lsvAddons.SelectedItems.Count > 0)
{
foreach (ListViewItem A in lsvAddons.SelectedItems)
if (Addons[A.Index] != null) Addons[A.Index].DoHelp();
}
else Console.WriteLine(_GenericHelpString);
Run Code Online (Sandbox Code Playgroud)
甚至:
if (lsvAddons.SelectedItems.Count > 0)
{
foreach (ListViewItem A in lsvAddons.SelectedItems)
{
if (Addons[A.Index] != null)
{
Addons[A.Index].DoHelp();
}
}
}
else
{
Console.WriteLine(_GenericHelpString)
}
Run Code Online (Sandbox Code Playgroud) 类似的东西,如果我输入字符串"Console.WriteLine",它将返回 - >"System.Console.WriteLine"
我假设通过反思有一些方法.
当我将CSharpCodeProvider类设置为使用.NET 3.5时,它会尝试加载某些引用的DLL时出错:
Line number 0, Error Number: CS0006, 'Metadata file 'System.Linq.dll' could not be found;
Line number 0, Error Number: CS0006, 'Metadata file 'System.Collections.dll' could not be found;
Run Code Online (Sandbox Code Playgroud)
问题是,如果我将它设置为2.0它可以工作,但它不能使用LINQ.
现在在其他线程中有解决方案说这是因为DLL不在正确的位置,并提供如下解决方案:
typeof(System.Xml.Linq.Extensions).Assembly.Location
Run Code Online (Sandbox Code Playgroud)
要获取Linq位置的位置,但由于我的程序工作方式,我不知道我可能需要加载哪些DLL.这对于外部库来说不是问题,因为用户需要输入它们的位置,但对于System dlls,我能够使用"System.Linq"或者获取它们的位置"System.Collections"吗?
我在主窗体上设置了 NotifyIcon,但是当窗体运行时,通知图标没有出现?
我将其可见属性设置为 true,如果我尝试显示气球工具提示:
ntiTrayIcon.ShowBalloonTip(1000, "Info:", "Double click this icon to close AlwaysOnTop", ToolTipIcon.Info);
Run Code Online (Sandbox Code Playgroud)
这也没有显示出来。
有什么问题?
表单上的一些信息:它是一个 SizeableToolWindow,它没有控制框或标题(因此它仅显示为边框),并且在一段时间后隐藏(它本质上是注册一些全局键盘挂钩的启动屏幕),这会吗是问题所在吗?
c# ×9
.net ×3
reflection ×2
.net-3.5 ×1
audio ×1
base36 ×1
c++ ×1
dll ×1
file ×1
indentation ×1
list ×1
macos ×1
mono ×1
namespaces ×1
opengl ×1
parameters ×1
pinvoke ×1
sdl ×1
system-tray ×1
tray ×1
xcode4 ×1