|
Bernhard Hiller wrote: And I'd suggest to replace typeof(BunchOfISomeInterface) with bunch.GetType() .
Why? Unless you're using a derived class, they'll both produce the same output, but the GetType call will be slower than the typeof call.
(See Jon Skeet's SO answer[^] for a benchmark.)
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Thanks, Richard,
Of interest to me is that if you do use the technique of creating a field with a reference to the Type as Skeet suggests:
private static readonly Type BunchType = typeof(BunchOfStuff); While there's no problem using this as the 'Type argument to create a new 'serializer, if you are de-serializing, none of these will work:
public static Dictionary<string, List<Stuff>> Read()
{
using (FileStream reader = new FileStream(filepath, FileMode.Open, FileAccess.Read))
{
serializer = new DataContractSerializer(BunchType);
return (Dictionary<string, List<Stuff>>) serializer.ReadObject(reader);
} So, that's two places you've got to use the 'naked' Type declaration.
Perhaps you are aware of another method to avoid writing the 'naked' Type ?
cheers, Bill
«I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.
|
|
|
|
|
You should be able to use:
public static BunchOfStuff Read()
{
using (var reader = File.OpenRead(filepath))
{
var serializer = new DataContractSerializer(BunchType);
return (BunchOfStuff)serializer.ReadObject(reader);
}
}
which at least avoids repeating the generic type definition.
However, there's no way to define a variable/field/parameter/property/return type using a type stored in another variable. The content of BunchType isn't known until run-time, but the return type needs to be known at compile-time.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Thanks; what I can see (verified by experiment) is that if what you are serializing is a Class with the [DataContract] Attribute, you are correct.
The reason why I could not make that work is (hypothetically) that I was serializing a data-structure, not a class instance.
I'm going to assume that standard/best practice is to serialize a Class instance, and use ... that.
cheers, Bill
«I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.
|
|
|
|
|
Thanks for replying, Bernard. I am just doing straightforward coding in .NET here, no client, no server.
After far too much wasted time, I have concluded that my question here is stupid in 2 ways:
1. experimentation suggests you can never use WCF to serialize some whatever/collection of instances of Interfaces, period.
2. what I wanted to achieve can be easily done by using the optional 'EmitDefaultValue parameter to the 'DataMember Attribute. I had just forgotten about that
cheers, Bill
«I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.
|
|
|
|
|
hi,
I have written the following code to export data from Excel
string tempPath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "Report.csv");
GView.SelectAllCells();
GView.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
ApplicationCommands.Copy.Execute(null, GView);
String result = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue);
GView.UnselectAllCells();
System.IO.StreamWriter file1 = new System.IO.StreamWriter(tempPath);
file1.WriteLine(result);
file1.Close();
Excel.Application app = new Excel.Application();
Excel.Workbook workbook = app.Workbooks.Open(tempPath);
Excel.Worksheet ws = workbook.Worksheets[1];
I have 2 columns contain dates. both of them looks dd/MM/yyyy on the data grid which is correct.
once out on excel they change to american date format!?
the weired thing is, before the 13th of every month they are in american format. after the 13th they show UK format.
can some guru help me please
|
|
|
|
|
You need to format the cells in Excel.
|
|
|
|
|
I'm currently in a trade-school type program to become a .NET developer, and am in a 'project management' mini course that has a project that requires me and my teammates to gather 30 interviews with .NET developers. To simplify this, we have created a simple survey that asks the questions we need answered.
It would help us out a lot if you could give us some feedback! I promise this isn't spam! Here is a link to the survey (via Google Forms).
https://docs.google.com/forms/d/1A6c8YrD0zUZ-EEBeW4Coybum8dgwAXkFW-bZvg714Qc/viewform[^]
|
|
|
|
|
This has nothing to do with C#, and should be posted in the Lounge, not the programming forums.
|
|
|
|
|
Sorry about that, I didn't know where to post this and was unaware of the Lounge section under the community tab. I tried to delete this thread, but am unable to do so. Anyways, sorry for the error!
|
|
|
|
|
Hi there,
how can I change the text of my textbox, while the code is running?
I will change it when I click on the button "search", and while the programm is searching the text in my textbox should be "searching ..."
Can anyone help me please?
|
|
|
|
|
Um...
myTextBox.Text = "Searching...";
I'm sure that isn't the problem you are having, but I can't work out from that little what problem you want us to solve.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
I think you are asking how you can use the TextBox as both the source of what to search for and, then, while searching, a kind of progress indicator.
If this is what you want, I'd argue against that because:
1. if the computer this runs on is not very powerful, you may delay the search.
2. if the computer this runs on is super-powerful, all you may see is a meaningless blur.
3. there is a traditional way of doing this: use either a progress-bar or a status-bar control.
There are good resources here on CP for using both progress-bar and/or status-bar with a process (like search) running in its own thread, which is desirable so that the main UI does not become frozen, and the user may have the opportunity to cancel the search, etc.
«I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.
|
|
|
|
|
Okay but how can I show that it is searching?
|
|
|
|
|
Is there a way to change the speech recognition language, without installing language packs in windows or by installing them, but not changing the default language pack?
|
|
|
|
|
|
Upvoted; might not have been what he wants to hear, but it is correct.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Have areal 5 back, for telling the truth.
|
|
|
|
|
You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1;
What's wrong with this bracket
private void BindGrid()
{
MySqlConnection con = new MySqlConnection(constr);
MySqlCommand cmd = new MySqlCommand("SELECT Rasm FROM rasmlar where Rasm_ID IN (" + String.Join(",", getRasm_ID1()) + ")", con);
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
gvImages.DataSource = dt;
gvImages.DataBind();
}
|
|
|
|
|
That depends entirely on what's returned by getRasm_ID1() and what the column type of Rasm_ID .
If you're going to build a string to hold the SQL statement, put the statement into a string variable so you can examine the contents of the string in the debugger before you create a MySqlCommand object with it.
|
|
|
|
|
After creating the command, examine what the statement in cmd.CommandText looks like to see the problem. Few possibilities that come in mind:
|
|
|
|
|
Your code is vulnerable to SQL Injection[^].
NEVER use string concatenation to build a SQL query. ALWAYS use a parameterized query.
private void BindGrid()
{
using (MySqlConnection con = new MySqlConnection(constr))
using (MySqlCommand cmd = new MySqlCommand(string.Empty, con))
{
var sb = new System.Text.StringBuilder("SELECT Rasm FROM rasmlar where Rasm_ID IN (");
foreach (var id in getRasm_ID1())
{
if (cmd.Parameters.Count != 0)
{
sb.Append(',');
}
string name = "@p" + index;
cmd.Parameters.AddWithValue(name, id);
sb.Append(name);
}
sb.Append(')');
cmd.CommandText = sb.ToString();
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
gvImages.DataSource = dt;
gvImages.DataBind();
}
}
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I am trying to solve the following problem but my code is not so good. Could anybody help me a little bit.
Write a function that provides change directory (cd) function for an abstract file system.
Notes:
Root path is '/'.
Path separator is '/'.
Parent directory is addressable as "..".
Directory names consist only of English alphabet letters (A-Z and a-z).
For example, new Path("/a/b/c/d").Cd("../x").CurrentPath should return "/a/b/c/x".
Heres my code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
public class Path
{
public string CurrentPath { get; private set; }
public Path(string path)
{
this.CurrentPath = path;
}
public Path Cd(string newPath)
{
Path pathStr = new Path(this.CurrentPath);
if (newPath == null | newPath == string.Empty)
{
throw new System.NotSupportedException("Waiting to be implemented.");
}
string patternUp = "([\\.]{2}/)+[a-zA-z]+";
string patternDown = @"/([a-zA-z]*)";
var matchesUp = Regex.Matches(newPath, patternUp);
var matchesDown = Regex.Matches(newPath, patternDown);
if (matchesUp.Count > 0)
{
var countUp = newPath.Count(c => c == '.');
pathStr.CurrentPath = pathStr.CurrentPath.Substring(0, pathStr.CurrentPath.Length - countUp);
pathStr.CurrentPath = pathStr.CurrentPath + "/" + newPath.Replace("../", "");
}
else
{
pathStr.CurrentPath = pathStr.CurrentPath + newPath.Replace("../", "");
}
return new Path(pathStr.CurrentPath);
}
public static void Main(string[] args)
{
Path path = new Path("/a/b/c/d");
Console.WriteLine(path.Cd("../x").CurrentPath);
}
}
|
|
|
|
|
Sure. You don't need the RegEx's at all. All you need is to split the passed in string on the "/" characters and process the items found from left to right.
This sniffs of a homework assignment.
|
|
|
|
|
What happens using the code example you give now ? Errors ? If so, what ?
«I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.
|
|
|
|