|
Done, but I've now run out of attributes -- how do you do blinking?
|
|
|
|
|
Of-course C# 4.0 , navigate the given link to get better clarification over optional parameter.
Click Me[^]
|
|
|
|
|
You can accomplish a similar effect by defining several versions of the same function, each with a different signature:
public static void sample(int i, string a)
{
bool b= true;
}
public static void sample(int i, bool b)
{
string s = string.Empty;
}
public static void sample(string a, bool b)
{
int i = 100;
}
etc...
If I remember my reading correctly, at run time the calling statement will be matched to the version with matching parameters, and the function will fill in the missing values with the predefined defaults.
Of course, I may be a complete idiot - I'm fairly new to C#. But it's what I would try if I really needed to do this.
Will Rogers never met me.
|
|
|
|
|
I usually implement that pattern as follows in C# 3.5:
public static void sample(int i, string a)
{
_sample(i,false,true,a);
}
public static void sample(int i, bool b)
_sample(i,false,b,string.Empty);
}
public static void sample(string a, bool b)
{
_sample(100,false,b,a);
}
private static void _sample(int i,bool a,bool b,string a_string)
{
}
Software Zen: delete this;
|
|
|
|
|
This is what I use, however I'll admit I feel it slopifies the code base....
I'd blame it on the Brain farts.. But let's be honest, it really is more like a Methane factory between my ears some days then it is anything else...
-----
"The conversations he was having with himself were becoming ominous."-.. On the radio...
|
|
|
|
|
You can use optional parameter .
you can this by this way
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Sum(1, 2, 3).ToString());
Console.WriteLine(Sum( 2, 3).ToString());
Console.ReadLine();
}
static int Sum(params int[] li)
{
int sum=0;
for ( int i = 0 ; i < li.Length ; i++ )
{
sum+=li[i];
}
return sum;
}
}
|
|
|
|
|
You've provided a way which can be only applicable to Integer, Try to expand it for all type of object passed in method.
Like instead of receiving data only in a array of int[], Receive it in object[]. and further check of every item in array whether it's bool,string,object of custom class,float,decimal.
That would be quite cumbersome, optional parameter is the good way , I guess.
|
|
|
|
|
Not exactly elegant but...
public static void sample(int i, string s, bool b)
{
if (i == default(int)) { i = 100; }
if (s == default(string)) { s = string.Empty; }
if (b == default(bool)) { b = true; }
}
Works in .NET Framework 3.5.
Kevin Rucker, Application Programmer
QSS Group, Inc.
United States Coast Guard OSC
Kevin.D.Rucker@uscg.mil
"Programming is an art form that fights back." -- Chad Hower
|
|
|
|
|
|
Yes, it just returns the framework's default value for the type specified.
Kevin Rucker, Application Programmer
QSS Group, Inc.
United States Coast Guard OSC
Kevin.D.Rucker@uscg.mil
"Programming is an art form that fights back." -- Chad Hower
|
|
|
|
|
So, then, how would I specify 0, null, and false (?) when I want to?
|
|
|
|
|
See the answer I posted to StephenPhillips.
Kevin Rucker, Application Programmer
QSS Group, Inc.
United States Coast Guard OSC
Kevin.D.Rucker@uscg.mil
"Programming is an art form that fights back." -- Chad Hower
|
|
|
|
|
Hmm, surely that misses the advantage of giving optional parameters, i.e. you can call the function without specifying all the input - using this form means you still need to give three values, or it doesn't match the function. Also, in this example, it's impossible to supply 'false' for the third value; false is the default value for a bool, so it would always become true.
|
|
|
|
|
You're absolutely correct, the only way to truly emulate optional parameters like in VB would be to use overloads of the method like this:
public static void sample(int i, string s, bool b)
{
}
public static void sample(int i)
{
sample(i, string.Empty, true);
}
public static void sample(int i, string s)
{
sample(i, s, true);
}
public static void sample(int i, bool b)
{
sample(i, string.Empty, b);
}
public static void sample(string s)
{
sample(100, s, true);
}
public static void sample(string s, bool b)
{
sample(100, s, b);
}
public static void sample (bool b)
{
sample(100, string.Empty, b);
}
public static void sample()
{
sample(100, string.Empty, true);
}
Which swiftly becomes unweildy once you get past three parameters.
Kevin Rucker, Application Programmer
QSS Group, Inc.
United States Coast Guard OSC
Kevin.D.Rucker@uscg.mil
"Programming is an art form that fights back." -- Chad Hower
|
|
|
|
|
visual studio 2010
First and the Foremost: FIGHT TO WIN
|
|
|
|
|
VB .NET has had optional parameters for some time
Looks like it took C# a while to catch up
(Yeah - I know! I shouldn't throw rocks at hornet's nests,
but sometimes you just can't resist!)
|
|
|
|
|
That's possible in C# 4, and the same syntax applies.
-jeff
|
|
|
|
|
As already pointed out, optional, default and named parameters are available in .NET 4.0
Interestingly, if you do use them the code analysis tool slaps your hand about it, requesting that you create overloads with the defaults set in method.
G
|
|
|
|
|
grgran wrote: .NET 4.0
C# 4 dagnabit!!!
|
|
|
|
|
No, you can't set default values. But you can use an overload to accomplish something similar.
public static void sample(int i, string s, bool b)
{
}
public static void sample()
{
sample(100, string.Empty, true);
}
public static void sample(int i)
{
sample(i, string.Empty, true);
}
|
|
|
|
|
Yes, the C# lost that feature from "primitive" C++. You get it back with interest in C# 4.0 - not only can you provide default parameter values, you can also name your parameters and provide them in any order you want.
For example, in C++ you had to order your function parameters correctly, so that the ones with default values came at the end.
void foo(int i = 1, int j = 0, int k)
This didn't work, because what does the call foo(1, 2) mean?
In C# 4.0, you can do that.
foo(k: 0, j: 1)
So add "named" parameters (arguments) to the feature, which was not available in C++.
|
|
|
|
|
hello everybody,
i'm retreiving data(API) with JSON format and i'm parsing it inside a hashtable,
it seems like some specific keys have a value= hashtable(or arraylist!)
below is how i'm extractin the the first layer value
foreach (object objResult in jsonResults)
{
Hashtable jsonResult = (Hashtable)objResult;
dt.Rows.Add(jsonResult["city"].ToString(), jsonResult["reviews"].ToString(), jsonResult["avg_rating"].ToString(), jsonResult["rating_img_url"].ToString());
}
the problem is where the values are equal to arraylist i'm not able to extract them
Is there any way to extract the second layer keys and values? (btw i'm very new to hashtables and arraylists)
Thank you in advance
|
|
|
|
|
Yes. You need to access the second level values using their keys and then putting them into your string.
e.g.
Dictionary x = (Dictionary)jsonResult["reviews"];<br />
string res = x["mySecondLevelReviews"].ToString();
The funniest thing about this particular signature is that by the time you realise it doesn't say anything it's too late to stop reading it.
My latest tip/trick
Visit the Hindi forum here.
|
|
|
|
|
thank you Abhinav for your help,
i did apply what you've suggested withoout any luck,
i just want to highlight that jsonResult["reviews"].GetType()= Arraylist
what should i set the the type of keys and values in Dictionary
Dictionary<tkey,tvalue> ?
thank you again for your concern
|
|
|
|
|
Since your data seems to be in JSON format, you might want to use JsonReaderWriterFactory[^] class. It will become much easier to parse.
|
|
|
|
|